我试图将一些用户输入的名称存储在一个参差不齐的数组中。但是我在运行期间遇到错误,并试图弄清楚出了什么问题。
我的代码:
int num, count, i;
char *myNames[10];
printf("Enter the number of names: ");
scanf( "%d" , &num);
fflush(stdin);
// Ask user to input the name
for( count = 0 ; count <= num ; count++)
{
printf("Enter a name: ");
scanf( "%s" , myNames[count]);
fflush(stdin);
}
// To check if names are stored correctly
printf("%s", *myNames[1]);
return 0;
}
感激如果有人可以分享一些帮助,或者至少指出我正确的方向。感谢
答案 0 :(得分:1)
您需要为字符串本身分配空间;目前你只分配一个10个指针的数组,但它们实际上从未指向任何有效的内存;因此,当scanf()尝试写入它们时,您会得到错误。
当然,为了给字符串分配适当的空间量,你需要知道字符串中有多少个字符,这有点鸡蛋问题;你应该使用一个堆栈分配的数组让scanf()写入然后strdup(),就像这样:
for( count = 0 ; count <= num ; count++)
{
printf("Enter a name: ");
char temp[1024];
scanf( "%s" , temp);
myNames[i] = strdup(temp);
fflush(stdin);
}
...当然如果你想让你的程序100%正确并避免内存泄漏,你需要在返回之前释放()10个字符串中的每一个,但如果这只是一个玩具程序你可以忽略这一点,让操作系统处理清理工作。
答案 1 :(得分:0)
char *myNames[10];
创建10个字符指针,指向一些随机内存位置。执行scanf( "%s" , myNames[count]);
时,您尝试写入此内存位置,从而导致访问冲突。您需要为字符串分配内存,然后通过执行以下操作使这些指针指向已分配的内存:myNames[0] = malloc(10);
为10个字符分配空间。请注意,处理完成后,您需要通过执行free(myNames[0]);
来释放内存。