我有一个文本文件,以非结构化的方式存储随机词。 (非结构化的意思是随机空间和空行) - 例如文本文件:如何从非结构化.txt文件读取单词并将每个单词存储在C中的char数组中?
file.txt的
word1 word2 word3
word4
word5
word6
我想这些词读入字符数组。我尝试了以下内容:
FILE *fp
fp = fopen("file.txt","r")
int numWords =0;
char *arr = malloc(sizeof(char *));
while(!feof(fp)){
fscanf(fp, "%s", arr);
numWords++;
}
fclose(fp);
由于某些原因,我无法从数组中访问每个单词。即我期待printf("%s", arr[0])
返回word1
等,但是,arr[0]
存储一个字符,在这种情况下,w
。
还有另一个问题。我在while
循环中放入了一个printf
语句,它将最后一个字word6
打印两次,这意味着由于某种原因,循环会在最后执行一段额外的时间。
如果有人可以帮助我如何实现这个目标,将不胜感激,谢谢!
请参阅:[为什么“while(!feof(file))”总是出错?](https://stackoverflow.com/q/5431941/4389800) – usr
如果您需要存储所有单词,则需要一个指针数组(或数组)。现在你只需要一个char *'(它的大小也不够)。 –
在C中,一个字符串是一个由零结尾的字符数组。你的'malloc'调用基本上要求系统分配一个*数组*,然后传给['fscanf'](http://en.cppreference.com/w/c/io/fscanf),它会读取在这个数组中添加“单词”并添加一个终止符。这有一个小问题:你只给一个char *(通常是4或8字节)分配空间,然后在这个内存中读入一个可能更长的单词。 –