之前都没有注意过这些差别 用错了的都不知道 今天百度了一下,现在了解清楚了 可能也有很多同学不太清楚的,可以仔细看一下 解释在代码中有
#include<bits/stdc++.h> using namespace std; int main() { char *a = "hello"; char arr1[]= "hello"; char arr2[] = { 'l', 'o', 'l' }; printf("%d\n", sizeof(a)); //结果为8,因为指针变量的所占空间大小仅仅和操作系统位数有关32-4,64-8 printf("%d\n", sizeof(arr1)); //结果为6,字符串默认以\0结尾,sizeof()包含\0的计算 printf("%d\n", sizeof(arr2)); //结果为3,因为为字符型表示,并不含有\0 printf("%d\n", strlen(a)); //结果为5,strlen求的是字符串的长度,不包含\0 printf("%d\n", strlen(arr1)); //结果为5,strlen求的是字符串的长度,不包含\0 printf("%d\n", strlen(arr2)); //结果为3 //如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如 //char str[6] = "abcxyz"; //strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。 return 0; }