今天写代码的时候,突发奇想,我们都知道,C的字符串后面会有一个\0 以式结尾,那好,来看看吧
#include <stdio.h>
#include <string.h>
char str1[] = "hello"; // 编译器自动添加 \0,占6字节
char str2[] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 手动添加
char str3[] = {'h', 'e', 'l', 'l', 'o'}; // 手动添加
int main()
{
// func1();
printf("%d\n", strlen(str1));//5
printf("%d\n", strlen(str2));//5
printf("%d\n", strlen("hello"));//5
printf("%d\n", sizeof("hello"));//6
return 0;
}
我们可以看到hello 本身占五个字节对吧,strlen 是 C/C++ 标准库中用于计算 C 风格字符串长度 的函数,其核心特性是 依赖 \0 终止符 来确定字符串结尾,什么意思呢,也就是接收一个带有\0 的字符串,然后返回\0 前有多少个字节个数,不包括 \0 本身。
而sizeof("hello") 则是直接把\0 算进去了。
那有人就问了,博主,博主,怎样才能不要这个\0 ,简单啊,看我的str3数组,我没有用strlen来输出他是因为,他没有\0 ,而strlen,函数的特点就是找到\0并返回前面的字节数,如果找不到,那就一直找,这样可能对发生内存越界,段错误,也可能返回一个错误的值,我调试给大家看吧,

所以还是不难看出,字符串后面是否有\0,还是很取决于自己的定义方式哈。
完结吧,没啥了

4万+

被折叠的 条评论
为什么被折叠?



