将字符串存储在一个参差不齐的数组中

时间:2013-02-13 05:26:07

标签: c arrays string

我试图将一些用户输入的名称存储在一个参差不齐的数组中。但是我在运行期间遇到错误,并试图弄清楚出了什么问题。

我的代码:

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

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

2 个答案:

答案 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]);来释放内存。