我正在尝试创建用户通过标准输入输入的字符串数组,并且遇到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,我就会出现分段错误,我无法弄清楚原因。我做错了什么?
答案 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]
用作数组,要么不能将字符串复制到其中。