strcpy给出seg错误

时间:2016-04-15 20:21:40

标签: c arrays string

我正在尝试创建用户通过标准输入输入的字符串数组,并且遇到strcpy问题。我们只是说用户输入一个字符串,我想将它放在我的字符串数组的索引0处,这就是我正在做的事情

// Assuming the user won't input anymore than 100 characters
char input[100];
char temp[100];
char buffer[100];
char *array_of_strings[1];

if(fgets(buffer, 100, stdin) != NULL){
sscanf(buffer, "%s", temp);
strcpy(array_of_strings[0], temp);
}

一旦我执行了strcpy,我就会出现分段错误,我无法弄清楚原因。我做错了什么?

2 个答案:

答案 0 :(得分:4)

array_of_strings是一个数组,其单个元素是char*指针。 char* 可能指向一个字符串,但您必须以某种方式分配内存以包含该字符串。

strcpy(array_of_strings[0], temp);

array_of_strings[0]是一个未初始化的指针。将它作为strcpy()的第一个参数传递具有未定义的行为。它可能(试图)破坏其垃圾值恰好指向的任何内存块 - 或者,如果您很幸运,您的内存管理系统将捕获错误并终止您的程序。

解决这个问题的一种方法是将array_of_strings定义为数组数组,而不是指针数组:

char array_of_strings[1][100];

另一种方法是使用malloc来分配空间:

char *array_of_strings[1];
array_of_strings[0] = malloc(100);
if (array_of_strings[0] == NULL) {
    /* allocation failed take some corrective action */
}

答案 1 :(得分:1)

array_of_strings[0]是一个指针,而不是一个数组。因此,要么使用malloc动态分配内存并将array_of_strings[0]用作数组,要么不能将字符串复制到其中。