我有一个文本文件,其中包含以非结构化方式存储的随机单词。 (非结构化意味着随机空格和空行) - 例如文本文件的内容:
文件.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
两次,这意味着循环会在由于某种原因结束。
如果有人可以帮助我实现这一目标,我将不胜感激,谢谢!
最佳答案
您的代码只是具有未定义的行为,因此在删除它之前无法进行推理。
该分配为单个 char *
指针分配空间,这通常意味着 8 或 4 个字节。就这样。那里没有空间保存大量的文字数据。 C 不会自动追加到数组或类似的东西,您需要处理所需的每个存储字节的分配。当您继续在分配的空间之外写入时,您会得到未定义的行为。
要存储这样的单词,您可能需要实现一个动态指针数组。这将处理存储任意数量的指针;指针(字)本身需要在添加到数组之前在堆上单独分配。这是相当多的代码。
如果您愿意接受一些静态限制(字长和字数),您当然可以:
char words[1000][30];
这将为您提供 1000 个单词的空间,每个单词最多 30 个字符。您可能需要考虑对数据进行重复数据删除,即在再次存储之前检查某个单词是否已存储。
关于c - 如何从非结构化 .txt 文件中读取单词并将每个单词存储在 C 中的 char 数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664890/