C中的strcpy seg错误

时间:2017-10-18 03:48:14

标签: c segmentation-fault strcpy

好奇这个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
}

2 个答案:

答案 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);