从例题看strlen()函数和sizeof运算符的区别:
(1)程序代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char aa1[10] = "Linux";
char aa2[] = "Linux";
char *bb = "Linux";
printf("sizeof(aa1) = %ld.\n",sizeof(aa1)); /* sizeof(aa1) = 10 */
printf("strlen(aa1) = %ld.\n",strlen(aa1)); /* strlen(aa1) = 5 */
printf("sizeof(aa2) = %ld.\n",sizeof(aa2)); /* sizeof(aa2) = 6 */
printf("strlen(aa2) = %ld.\n",strlen(aa2)); /* strlen(aa2) = 5 */
printf("sizeof(bb) = %ld.\n",sizeof(bb)); /* sizeof(bb) = 4 (32位系统)*/
printf("strlen(bb) = %ld.\n",strlen(bb)); /* strlen(bb) = 5 */
return 0;
}
(2)运行结果:
(3)代码分析:
从strlen的角度来看问题:
strlen(…)=5;strlen()是C库函数,它计算字符串的长度不包括字符’\0’。
从sizeof的角度来看问题:
(a) sizeof(aa1)=10;说明:sizeof运算符计算的是编译时期分配内存的大小。
(b) sizeof(aa2)=6;而strlen(aa2)=5说明:sizeof(aa2)=6比strlen(aa2)=5少1的原因是:在编译期间,编译器自动在字符串aa2[]后加’\0’字符。
(c) sizeof(bb)=8;而不是期望的sizeof(bb)=4.原因是我的编译环境是Ubuntu18.04(64位系统),在32位系统下sizeof(bb)=4。