关于C语言fgets()读取文件?
我读写的文件内容123456abcdef#include<stdio.h>#include<string.h>voidmain(){FILE*read;charbuffe...
我读写的文件内容
123456
abcdef
#include<stdio.h>
#include<string.h>
void main()
{
FILE *read;
char buffer[64];
if((read = fopen("read.txt","rb")) == NULL)
{
printf("open file error!");
}
while(!feof(read))
{
fgets(buffer,4,read);
printf("strlen : %d\n",strlen(buffer));
puts(buffer);
}
}
我每次读取的是三个字符。fgets()读取的时候编译器是怎样知道读取三个字符的。列入。我读第一行的时候。读取两次后。第三次把'\r','\n'存放在串中。是不是读一行遇到'\n'之后。不论你要读取的字符数是多少。函数都会停止读字符。而做下面的操作。
可是读取第二行的时候。没有换行呀。第三次它怎么知道刚好三个字符,它是怎样知道最后刚好读三个字节的。结果还有点不正确!! 展开
123456
abcdef
#include<stdio.h>
#include<string.h>
void main()
{
FILE *read;
char buffer[64];
if((read = fopen("read.txt","rb")) == NULL)
{
printf("open file error!");
}
while(!feof(read))
{
fgets(buffer,4,read);
printf("strlen : %d\n",strlen(buffer));
puts(buffer);
}
}
我每次读取的是三个字符。fgets()读取的时候编译器是怎样知道读取三个字符的。列入。我读第一行的时候。读取两次后。第三次把'\r','\n'存放在串中。是不是读一行遇到'\n'之后。不论你要读取的字符数是多少。函数都会停止读字符。而做下面的操作。
可是读取第二行的时候。没有换行呀。第三次它怎么知道刚好三个字符,它是怎样知道最后刚好读三个字节的。结果还有点不正确!! 展开
3个回答
展开全部
C语言中fgets()函数说明:fgets()用来从参数stream 所指的文件内读入字符并存到参数s 所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1 个字符为止, 最后会加上NULL 作为字符串结束。
原型 char * fgets(char * s, int n,FILE *stream);
参数:
s: 字符型指针,指向存储读入数据的缓冲区的地址。
n: 从流中读入n-1个字符。
stream : 指向读取的流。
返回值:
1. 当n<=0 时返回NULL,即空指针。
2. 当n=1 时,返回空串""。
3. 如果读入成功,则返回缓冲区的地址。
4. 如果读入错误或遇到文件结尾(EOF),则返回NULL。
标准库中fgets(...)的实现如下:
char *fgets(char *s, int n, FILE *stream)
{
register int c;
register char *cs;
cs=s;
while(--n>0 &&(c = getc(stream))!=EOF)
if ((*cs++= c) =='\n')
break;
*cs ='\0';
return (c == EOF && cs == s) ?NULL :s ;
}
展开全部
你的第二行应该没有回车加换行的,文件结尾有EOF,至于怎么读取三个字符的不用深究吧,有输入缓冲区 。fgets()在到达行末时停止
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fgets(buffer,4,read);从流中读取buf_size-1个字符,除非读完一行,这边就是4-1=3啦
最后一个是'\0'
最后一个是'\0'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询