我正在尝试编写一个代码,它接收无限数量的名称作为输入,并打印输入的数量和名称。但是,似乎在while
循环结束后,字符串数组中的每个位置都是“QUIT”,这是while
循环的结束条件。如果有人能看出问题所在,我将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char Input_String[50]="bla";
printf("Please enter list of names:");
char** InputArr=(char**)malloc(1*sizeof(char**));
int count=1;
fgets(Input_String,50,stdin);
if(strcmp(Input_String,"QUIT\n"))
InputArr[0]=Input_String;
printf("%s",InputArr[0]);
while(strcmp(Input_String,"QUIT\n"))
{
fgets(Input_String,50,stdin);
if(strcmp(Input_String,"QUIT\n")!=0)
{
count++;
InputArr= (char**)realloc(InputArr,(count)*sizeof(char*));
InputArr[count-1]=Input_String;
printf("%s",InputArr[count-1]);
}
}
printf("There are %d names:\n",count);
int i;
for(i=0;i<count;i++)
{
printf("%s",InputArr[i]);
}
}
答案 0 :(得分:4)
在这一行
InputArr[count-1]=Input_String;
您正在将该字符串的地址写入每个数组元素。所以当你完成后,他们都指向你输入的最后一条消息,即QUIT
。
我建议
InputArr[count-1]=strdup(Input_String);
但请记住free
之后由strdup
分配的内存{/ 1}。