我有一个名为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
这只是第一行...我无法理解原因!!!
答案 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()