【发布时间】:2017-10-10 10:51:17
【问题描述】:
我有一个文本文件,其中包含以非结构化方式存储的随机单词。 (非结构化意味着随机空格和空行) - 例如文本文件:
文件.txt
word1 word2 word3
word4
word5
word6
我想将这些单词中的每一个读入一个 char 数组。我尝试了以下方法:
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 两次,这意味着循环由于某种原因在最后执行了额外的时间。
如果有人可以帮助我实现这个目标,将不胜感激,谢谢!
【问题讨论】:
-
如果你需要存储所有的单词,你需要一个指针数组(或数组)。现在你只有一个
char*(大小也不够)。 -
在 C 中,字符串是一个字符数组,以零结尾。您的
malloc调用基本上要求系统分配一个字符数组,然后您将其传递给fscanf,它会将“单词”读入该数组并添加一个终止符。这样做有一个小问题:您只为单个char *分配空间(通常为 4 或 8 个字节),然后将一个可能更长的单词读入该内存。 -
至于您的问题,您需要的是一个指针数组(类型为
char **),然后为该数组中的每个条目分配足够的内存来保存一个字符串。然后将数组中的指针传递给fscanf作为单词的目标。 -
嗨@Someprogrammerdude。感谢您的答复。我把数组改成了
char **arr = (char **)malloc (1000 * sizeof (char *));现在怎么用fscanf?