char str1[15]="hello"; //用""赋值系统会在字符串结尾自动添'\0'
printf("strlen_str1 = %ld\n",strlen(str1));
printf("sizeof_str1 = %ld\n",sizeof(str1));
//>>>strlen_str1 = 5
//>>>sizeof_str1 = 15
//若字符串数组长度给定,strlen遇到到'\0'结束,且不统计'\0',而sizeof统计整个数组长度
char str2[]="hello";
printf("strlen_str2 = %ld\n",strlen(str2));
printf("sizeof_str2 = %ld\n",sizeof(str2));
//>>>strlen_str2 = 5
//>>>sizeof_str2 = 6
//若字符串数组长度未给定,赋值结束后,系统会根据字符串长度,固定字符串数组的长度
//同样,strlen遇到到'\0'结束,且不统计'\0',而sizeof统计整个数组长度
char str3[]="你好";
printf("strlen_str3 = %ld\n",strlen(str3));
printf("sizeof_str3 = %ld\n",sizeof(str3));
//>>>strlen_str3 = 6
//>>>sizeof_str3 = 7
//原因:与系统所采用的字符编码方式有关
//如果系统采用的是utf-8,那么strlen("你")=3,即一个汉字占用3个字节。Linux系统默认情况下采用的该种编码方式。
//如果系统采用的是gb2312,则strlen("你")=2,即一个汉字占用2个字节。windows中文版采用的该种编码方式。
char str4[15] = {'h','e','l','l','o'}; //''单个赋值不会自动加'\0'
printf("strlen_str4 = %ld\n",strlen(str4));
printf("sizeof_str4 = %ld\n",sizeof(str4));
//>>>strlen_str4 = 5
//>>>sizeof_str4 = 15
char str5[] = {'h','e','l','l','o'};
printf("strlen_str5 = %ld\n",strlen(str5));
printf("sizeof_str5 = %ld\n",sizeof(str5));
//>>>strlen_str5 = 10(未知数) strlen找不到'\0'会一直找下去
//>>>sizeof_str5 = 5
char str6[] = {'h','e','l','l','o','\0'};
printf("strlen_str6 = %ld\n",strlen(str6));
printf("sizeof_str6 = %ld\n",sizeof(str6));
//>>>strlen_str6 = 5
//>>>sizeof_str6 = 6
char str7[] = {'h','\n','e','l','l','o','\0','a'};
printf("strlen_str7 = %ld\n",strlen(str7));
printf("sizeof_str7 = %ld\n",sizeof(str7));
//>>>strlen_str7 = 6 strlen会统计\n,但不会结束
//>>>sizeof_str7 = 8
#if 0
//C语言中1个汉字占2个字节,但''中只能存1个字节,所以此写法错误
char str4[15]={'你'};
printf("strlen_str4 = %ld\n",strlen(str4));
printf("sizeof_str4 = %ld\n",sizeof(str4));
#endif
return 0;
字符串数组中,strlen与sizeof的比较
最新推荐文章于 2024-03-15 17:37:28 发布