【发布时间】:2015-09-10 00:10:42
【问题描述】:
因此,我尝试从文本文件中扫描大量单词,并以允许从单个数组访问它们的方式存储它们。
149256
aahing
aahs
aals
aardvark
aardvarks
aardwolf
aardwolves
aargh
aarrgh
aarrghh
我正在从上述格式的文本文件中扫描这些单词。该数字是列表中存在的单词总数(它是一本字典,解释了高字数),并且单词一次跟随一行。我希望能够从动态分配的数组中访问每个单词,即 word[0] 将包含“aahing”。现在我知道一个简单的 char 数组无法做到这一点。我首先尝试在下面的代码中使用多维数组来完成此操作:
main(){
int numWords,i;
FILE * fp= fopen("dictionary.txt","r");
fscanf(fp,"%d", &numWords);
char* array = malloc(numWords * 20 * sizeof(char)); //word length is always below 20
for(i = 0; i < numWords; i++){
fscanf(fp, "%s", &array[i]);
//printf("%s \n",&array[i]); used to check the scan
}
printf("%s \n",&array[0]);
}
*我的理解不应该需要数组的 & infront,但是当这些不存在时程序会崩溃,这可能是我的代码有问题。
现在,当删除最后的 printf 语句并取消循环中的 printf 注释时,程序似乎可以正常工作。但是,如果添加最后一个 printf,程序会打印扫描的每个单词的第一个字母以及最后一个单词的全部内容。据我了解,这是不可能的,因为每个新单词都应该被扫描到数组的不同行中,但显然情况并非如此。在这种情况下,我会更好地以某种方式分配数组的每个插槽以指向每个插槽中的新数组吗?即 array[1] -> data[] , array[2] -> data[] 每个都包含一个新单词。 非常感谢您指出正确的方向。
【问题讨论】: