fgets函数读入的字符个数多1

来源:互联网 发布:淘宝苹果手机报价 编辑:程序博客网 时间:2024/06/05 00:40

fgets函数:


char *fgets(char *s, int n, FILE *stream); 


功能:
  从文件指针stream中读取n-1个字符,存到以s为起始地址的空间里,直到读完一行,如果成功则返回s的指针,否则返回NULL。
  形参注释:
  *s:结果数据的首地址;     n:一次读入n-1个数据块的长度,其默认值为1k,即1024;      stream:文件指针


UBUNTU下:    fgets(s, sizeof(s), stdin)  读入的字符要比   看上去的长度多1.   

                         原因是因为它把回车符号\n也读进去了!!!!!

WINDOWS下也是这样。 


what fucking fgets for my whole day!!!!! MARK.


//-----------------------------------------------------------------------------以下转载:  http://blog.sina.com.cn/s/blog_4462f8560100tqau.html

windows换行是\r\n,十六进制数值是:0D0A。
LINUX换行是\n,十六进制数值是:0A
所以在linux保存的文件在windows上用记事本看的话会出现黑点,我们可以在LINUX下用命令把linux的文件格式转换成win格式的。
unix2dos 是把linux文件格式转换成windows文件格式
dos2unix 是把windows格式转换成linux文件格式。
linux下删除windows换行符^M
OJ判题时发现一个问题:用%c读入的代码都会报wa。后来发现跟scanf有关。在linux下使用%c会读到\n和\r两个字符。所以需要将^M(也就是\r)字符删掉
删除方法不少。找了一个比较简单的。
要将a.txt里的^M去掉并写入b.txt,则使用如下指令cat a.txt | tr -d "^M" > b.txt
注意:语句中的^M是通过ctrl+V, ctrl+M输入的。特指/r字符
 
unix 下换行符只有: \r
Dos 下换行符有:\r\n
具体的, \r的ascii 码是:14
\n的ascii 码是:10


原创粉丝点击