读取文本文件的内容并将其显示为字符串时出现问题

时间:2011-08-01 04:29:51

标签: c

我有一个名为MySQL.txt的文本文件,其中包含以下内容:

MySQL_IP:172.19.1.173
MySQL_USER:kok
MySQL_PASS:kok
MySQL_DATABASE:kok

我正在尝试使用以下代码读取文件的内容

#include<stdio.h>
main()
{
FILE *fp;
char str[50000];
fp = fopen("MySQL.txt","r");
fgets(str,sizeof(str),fp);
printf("%s\n",str);
}

无论我增加多少字符串缓冲区的大小,我都会提供以下输出:

MySQL_IP:172.19.1.173

这只是第一行...我无法理解原因!!!

3 个答案:

答案 0 :(得分:3)

有一些文档可以在您最喜欢的搜索引擎上轻松查找并告诉您答案。例如,as described on this page for fgets()

  

fgets()函数应从流中读取字节到数组中   由 s 指向,直到 n-1 字节被读取,或者a被读取并且   转移到 s ,或遇到文件结束条件。该   然后使用空字节终止字符串。

如果您需要一次阅读整个文件,请使用fread()代替fgets()。与fgets()不同,fread()不会在出现换行符时停止阅读。

如果您想逐行处理文件,请反复调用fgets(),直到feof()返回非零值(表示EOF)或ferror()返回非零值(表示错误情况)。

答案 1 :(得分:0)

fgets读取一行,即:直到文本或文件末尾的下一个\n(换行符)。

要读取整个文件,您需要重复序列,直到feof返回true。

答案 2 :(得分:0)

fgets文件说:

syntex:

char * fgets(char * str,int num,FILE * stream);

从流中读取字符并将它们作为C字符串存储到str中,直到读取了(num-1)个字符或者到达了换行符或文件结尾,以先到者为准。 换行符使fgets停止读取,但它被认为是有效字符,因此它包含在复制到str的字符串中。 在读取字符后,空字符会自动附加在str中,以表示C字符串的结尾。

所以这里的fgets只能读到第一行 所以我建议你使用fread()