C语言中使用sizeof无法返回输入内容实际长度是什么原因
C语言sizeof相关问题解答
问题核心原因
你混淆了sizeof运算符和字符串长度统计函数的作用:
sizeof是编译期执行的运算符,它的返回值是目标变量/类型占用的总内存字节数,和运行期存入的内容没有任何关联。你定义的char toFind[100]是长度为100的char类型数组,编译阶段就已经确定它占用100字节内存,因此sizeof(toFind)的结果永远是100,和你输入的内容无关。- 如果你需要获取实际输入的字符串的长度,应该使用标准库的
strlen函数,该函数会从数组首地址开始遍历计数,直到遇到字符串结束符\0为止,返回的结果就是你输入的有效字符的长度。
修正后的参考代码
#include <stdio.h> #include <string.h> int main() { char toFind[100]; fgets(toFind, sizeof(toFind), stdin); printf("数组总占用内存:%i\n", sizeof(toFind)); printf("输入的字符串实际长度:%zu\n", strlen(toFind)); return 0; }
额外注意事项
fgets读取输入时会将你按下回车输入的换行符\n也存入数组,因此strlen统计的结果会比你输入的可见字符多1,不需要的话可以手动移除数组末尾的换行符。
内容的提问来源于stack exchange,提问作者jonasPamm
相关产品推荐
相关产品推荐

