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

时间:2015-10-23 15:27:04

标签: c arrays file

所以我试图将输入文件中的单词分开并将它们放入数组中。但是,当我在循环期间尝试将它们放入我的数组时,我稍后尝试打印我的数组,它只为每个项目返回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;

}

我知道while循环将文件分成单词,但由于某种原因,我无法将这些单词正确地放入数组中。我在那里有一个注释掉的strcpy函数,因为我觉得这个函数可以帮助很多,但是当我尝试实现它时它也无法正常工作。

我不确定问题是内存分配还是内存分配。我是初学者,从python转换到C,所以我不习惯内存分配,指针等。提前谢谢。

1 个答案:

答案 0 :(得分:2)

现在你有一个二维数组,表中包含未知数量的元素。您可以使用strdup为元素动态分配内存。

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

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

此外,打印元素的代码不正确,因为sizeof无法确定动态分配的内存块中的元素数量。相反,你可以从0迭代到i(这将是表的大小)

int x;
for (x=0; x < i; x++)
{
  printf("%s \n", table[x]);
  free(input[x]);
}

由于事件strdup分配内存,因此您需要在完成后将其释放(在致电printf之后)。