所以我试图将输入文件中的单词分开并将它们放入数组中。但是,当我在循环期间尝试将它们放入我的数组时,我稍后尝试打印我的数组,它只为每个项目返回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,所以我不习惯内存分配,指针等。提前谢谢。
答案 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
之后)。