[英]How to read words from unstructured .txt file and store each word in a char array in C?
我有一个文本文件,其中随机单词以非结构化方式存储。 (非结构化表示随机空格和空白行)-例如文本文件:
file.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 *
指针分配空间,这通常意味着8或4个字节。 就这样。 没有空间在其中保存大量的单词数据。 C不会自动追加到数组或类似的东西,您需要处理所需的每个存储字节的分配。 当您继续在分配的空间之外书写时,您将得到未定义的行为。
要存储这样的单词,您可能需要实现动态指针数组。 那将处理存储任意数量的指针; 指针(单词)本身需要先添加到堆上,然后再添加到数组中。 这是很多代码。
如果您愿意忍受一些静态限制(在字长和字数方面),则可以这样做:
char words[1000][30];
这将为您提供1000个单词的空间,每个单词最多30个字符。 您可能需要考虑对数据进行重复数据删除,即在再次存储单词之前检查单词是否已经存储。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.