好奇这个strcpy出了什么问题。
int main(void){
char *history[10];
for(int i = 0; i < 10; i++){
history[i] = NULL;
}
char line[80];
fgets(line,80,stdin);
strcpy(history[0],line); //This line segfaults
}
答案 0 :(得分:4)
您已经创建了一个NULL指针数组。然后,您尝试将字符复制到NULL。这是禁忌。
编辑: 您的程序可以针对此进行优化:
void main() {
char line[80];
fgets(line,80,stdin);
}
您的历史数组永远不会用于生成任何输出。所以,虽然其他人已经指出你需要分配内存,但从技术上讲,你可以简单地这样做:
history[0] = line;
这将是一个有效的指针,直到该行超出范围,这是历史超出范围所以它无关紧要。
答案 1 :(得分:1)
您需要为history[0]
分配内存。如果history[0]
被指定为NULL,则引用它或写入它将/可能导致段错误。
类似
//this will create memory for 100 chars
history[0] = malloc(sizeof(char) * 100);
strcpy(history[0],line);
或者
//shortcut for both - this allocate new memory and returns pointer.
history[0] = strdup(line);