C 如何将输入文件中的单词放入数组?

C 如何将输入文件中的单词放入数组?,c,arrays,file,C,Arrays,File,因此,我试图将单词从输入文件中分离出来,并将它们放入一个数组中。但是,当我在循环过程中尝试将它们放入数组时,我稍后会尝试打印数组,并且它只为每个项返回NULL。以下是我得到的: #include <stdlib.h> #include <stdio.h> #include <string.h> int main (void) { FILE *inputfile; int table_size = 100; char *table[t

因此,我试图将单词从输入文件中分离出来,并将它们放入一个数组中。但是,当我在循环过程中尝试将它们放入数组时,我稍后会尝试打印数组,并且它只为每个项返回NULL。以下是我得到的:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


int main (void)
{
    FILE *inputfile;
    int table_size = 100;
    char *table[table_size];
    inputfile = fopen("input.txt", "r");
    char str[60];
    char *token;
    int i = 0;
    if (inputfile == NULL)
    {
        printf("Could not open file!");
        return 1;
    }


     while ( fgets (str, 60, inputfile)!=NULL )
     {
        token = strtok(str, " ");

        while (token != NULL)
        {
           token = table[i];
           //strcpy(table[i], token);
           i++;
           token = strtok(NULL, " ");
         }
      }

    int x;
    for (x=0; x <= sizeof(table)/sizeof(int); x++)
        {
         printf("%s \n", table[x]);
        }
    fclose(inputfile);

return 2;

}
#包括
#包括
#包括
内部主(空)
{
文件*输入文件;
int table_size=100;
字符*表格[表格大小];
inputfile=fopen(“input.txt”、“r”);
char-str[60];
字符*令牌;
int i=0;
if(inputfile==NULL)
{
printf(“无法打开文件!”);
返回1;
}
while(fgets(str,60,inputfile)!=NULL)
{
标记=strtok(str,“”);
while(令牌!=NULL)
{
令牌=表[i];
//strcpy(表[i],标记);
i++;
令牌=strtok(空,“”);
}
}
int x;

对于(x=0;x现在,您有一个二维数组,表中的元素数量未知。您可以使用
strdup
为元素动态分配内存

while (fgets (str, 60, inputfile)!=NULL) {
  token = strtok(str, " ");

  while (token != NULL)
  {
     table[i] = strdup(token);
     i++;
     token = strtok(NULL, " ");
   }
}
另外,您用于打印元素的代码不正确,因为
sizeof
无法确定动态分配内存块中的元素数量。相反,您可以从0迭代到i(即表的大小)

intx;
对于(x=0;x

因为事实上,
strdup
分配了完成后(调用
printf
)释放所需的内存。

table[i]=strdup(token);
for(x=0;x
for(x=0;x
这两条注释都很小,帮助很大。谢谢大家。发布的代码编译起来不干净。这一行:
for(x=0;x这一行是什么:
token=table[i];
预期要做什么?也许你的意思是:
table[i]=strdup(token)
这太完美了。谢谢你,我真的很感谢你的帮助。@TheNavesinkBanks没问题,这只是为了澄清EOF和Cool Guy在评论中提到的:)
int x;
for (x=0; x < i; x++)
{
  printf("%s \n", table[x]);
  free(input[x]);
}