fgets()

 在写网络编程时候遇到一个问题:通过fgets读取到了一行输入到缓冲区中,总是要通过strlen()来查下缓冲区中的长度,然后替换。

一开始没懂这个操作,后来查了下资料,原来fgets在读取输入流的时候,会读取你最后的那个回车,也就是'\n'。

比如你现在输入:abcde

实际上保存到缓存区中的是:abcde\n

然而fgets()会自动再补一个‘\0’,也就是说保存到缓冲区send_line中的是abcde\n\0,但是其实我们就没想要这个'\n'这势必会造成数据的不准确,所以我们就要自己来进行一个替换,把最后的'\n'给换成'\0'。

fgets(char *s, int size, FILE *stream) 
//s 缓冲区
//size 最大读取长度
//文件流 如 stdin


while (fgets(send_line, MAXLINE, stdin) != NULL) {
        int i = strlen(send_line);
        if (send_line[i - 1] == '\n') {
            send_line[i - 1] = 0;
        }
        ...
}

这里还有个疑问,既然都会保存'\n',那为什么要判断呢?直接把最后一个'\n'进行替换不就好了吗?

我试着输入超过给定size大小的字符串,比如:

就发现,当你输入超过size的时候,其实不会再保存那个'\n'换行符了,自己就保存成了'\0'。

所以还是记住这种写法!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值