C语言fgets()结尾'\0'还是‘\n'

本文探讨了C语言中fgets函数的行为,详细解释了sizeof与strlen的区别,以及如何正确处理fgets读取的字符串,避免 字符的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习Head First C的时候看到了一段代码心生疑问

fgets(search_for, 80, stdin);
search_for[strlen(search_for)-1]='\0';

1.没有弄清sizeof()和strlen()的区别。sizeof()是计算存储空间大小,无论又没有‘\0’或者是’\n’
2.strlen()检测直到找到‘\0’前字符串的长度,例如 strlen(‘China\0’)=5
3.看了一些优快云的文章有的作者说是’\n’有的说是‘\0’,实际结果是(Windows验证)fgets()的字符串结尾既包含‘\0’又包含‘\n’,如下代码可验证(修改对应位置为\0或者\n即可。)
4.例如 fgets(“China”) = "China\n\0"

#include <stdio.h>
#include <string.h>
void main()
{
    char answer[100],*p;
    printf("Type something:\n");
    fgets(answer,sizeof (answer),stdin);
    if((p = strchr(answer,'\n')) != NULL)
        *p = '\0';//手动将\n位置处的值变为0
    printf("You typed \"%s\"\n",answer);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值