You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两种C语言删除换行符实现结果不同,为何第二个程序字符串长度不变

问题原因说明
  • 首先明确C语言中strlen函数的定义:它会返回字符串中\0终止符之前的字符总数,不包含\0本身。也就是说对于任意合法的C字符串x,x[strlen(x)]的位置一定是终止符\0。
  • 第一个程序的逻辑是正确的:当你用fgets读取输入时,输入的换行符\n会被存放在字符串最后一个有效字符的位置,也就是索引为strlen(x)-1的位置。程序判断到该位置是\n后将其替换为\0,相当于提前截断了字符串,长度自然会减少1。
  • 第二个程序的错误在于索引取值错误:你判断的是x[len]的位置,这个位置本来就是原字符串的\0终止符,永远不可能等于\n,所以if分支的代码永远不会执行,没有对原字符串做任何修改,字符串长度自然和未处理前一致,不会发生变化。

内容的提问来源于stack exchange,提问作者Ngoc Anh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:15:03