为何strlen在此处统计了空终止符?求代码现象原因解析
关于你对strlen统计空终止符的误解解释
首先明确:你这段代码里的strlen并没有统计空终止符,你觉得它统计了,是因为对fgets的行为不了解。
fgets的特性是会把用户输入时按下的换行符\n也读取到目标数组中,这个换行符属于字符串的有效内容,会被strlen计入统计长度- 举个实际例子:如果你输入
hello然后按回车,name数组里的内容是h e l l o \n \0,此时strlen返回的是6(5个输入字符加1个换行符),而不是包含空终止符的7 - 你可以添加调试代码验证:比如用
for循环逐个打印name里的字符及其ASCII值,就能看到换行符的存在 - 如果想让
strlen只统计你输入的实际字符数,可以手动去掉换行符,比如用strcspn快速定位换行符并替换为空终止符:name[strcspn(name, "\n")] = '\0';
内容的提问来源于stack exchange,提问作者Ayush Kumar
相关产品推荐
相关产品推荐

