C 如何将输入文件中的单词放入数组?
因此,我试图将单词从输入文件中分离出来,并将它们放入一个数组中。但是,当我在循环过程中尝试将它们放入数组时,我稍后会尝试打印数组,并且它只为每个项返回NULL。以下是我得到的: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
#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;xfor(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]);
}