繁体   English   中英

将文本文件行存储到数组中

[英]Storing a text file lines into Array

我正在尝试从文件中获取文本并将其存储到二维数组中,每一行将是不同的行,每个单词将是不同的列我想先存储行然后单独的单词,但这在 while 循环中不太正确它的打印正确但在循环数组之外只有最后一行有帮助吗?

    char **arr;
    arr=malloc(sizeof(int)*line);
    int a ;
    for(a=0;a<line;a++){
        arr[a]=(char*)malloc(sizeof(int)*maxword);
    }
    int i=0;
    rewind(fp);
    while(fgets(command,count, fp)!=NULL) {
        arr[i]=command;
        printf("%s",arr[i]);

        i++;

    }

这里的问题是您尝试将输入command字符串复制到arr字符串数组中的方式。 您拥有的线路:

arr[i]=command;

将字符串指针command的值分配给arr[i]处的字符串指针,该值是command字符串的开头。 然后,当您在循环将其打印出来时,它会正确显示,因为您刚刚读入了该字符串。

但是,在循环的每次迭代中,您都为“下一个” arr[i]提供了相同的指针command字符串的开头)。 因此,当您在循环完成后打印出每个arr[i]字符串时,每个字符串都将指向同一个字符串,该字符串将具有 last-read command的任何值。

相反,在您的循环中,您应该将上面的行替换为:

strcpy(arr[i], command);

这会将command的内容复制arr[i]索引的字符串中。

试试看。 并随时要求进一步澄清和/或解释。

编辑:另外,正如user3121023在评论中指出的那样,您需要释放您为arr分配的 memory但只有当您完全使用它时! 您可以通过调用free的 function 来执行此操作,对应于您的每个malloc调用:

for(a=0;a<line;a++){
    free(arr[a]); // First, run through a loop freeing each row ...
}
free(arr); // ... and only then free the "array of row pointers!"

EDIT2:哦,我忘了! 正如Bodo所指出的(感谢您的提醒),您绝不能假设指针具有任何给定的大小。 你有:

arr=malloc(sizeof(int)*line);

它假定指向 char 的指针具有int的大小。 它可能会在某些平台上运行,但永远不要依赖于此。 改用这个:

arr=malloc(sizeof(char*)*line);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM