C中的strcpy seg故障



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

相关内容

  • 没有找到相关文章