0

我试图将一些用户输入的名称存储在一个参差不齐的数组中。但是,我在运行时遇到错误,我试图找出问题所在。

我的代码:

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;
}

如果有人可以分享一些帮助,或者至少为我指出正确的方向,我将不胜感激。谢谢

4

2 回答 2

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% 正确并避免内存泄漏,则需要在返回之前 free() 10 个字符串中的每一个,但如果这只是一个玩具程序,您可以忽略它并让操作系统处理清理工作。

于 2013-02-13T05:30:08.227 回答
0

char *myNames[10];创建指向某个随机内存位置的 10 个字符指针。当你这样做时,scanf( "%s" , myNames[count]);你正试图写入这个导致访问冲突的内存位置。您需要为字符串分配内存,然后通过执行以下操作使这些指针指向分配的内存:myNames[0] = malloc(10);为 10 个字符分配空间。请注意,一旦处理完成,您需要通过free(myNames[0]);.

于 2013-02-13T05:29:08.720 回答