两种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
相关产品推荐
相关产品推荐

