好奇这个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
}
你已经创建了一个 NULL 指针数组。然后,您尝试将字符复制到 NULL 上。 这是不行的。
编辑:您的程序可以针对以下内容进行优化:
void main() {
char line[80];
fgets(line,80,stdin);
}
您的历史记录数组永远不会用于生成任何输出。因此,虽然其他人指出您需要分配内存,但从技术上讲,您可以简单地这样做:
history[0] = line;
这将是一个有效的指针,直到该行超出范围,这是当历史超出范围时,所以它无关紧要。
您需要
为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);