阵列改变之后

时间:2017-01-09 17:02:32

标签: c

我正在尝试编写一个代码,它接收无限数量的名称作为输入,并打印输入的数量和名称。但是,似乎在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]);
      }
  }

1 个答案:

答案 0 :(得分:4)

在这一行

InputArr[count-1]=Input_String;

您正在将该字符串的地址写入每个数组元素。所以当你完成后,他们都指向你输入的最后一条消息,即QUIT

我建议

InputArr[count-1]=strdup(Input_String);

但请记住free之后由strdup分配的内存{/ 1}。