首页 > 解决方案 > strlen(null_terminated_array) 执行 printf("%zu", strlen(null_terminated_array)) 打印包含 '\0' 的 size_t

问题描述

如果我有一个char *null_terminated_array="hello",我认为printf("%zu",strlen(null_terminated_array))应该打印5(不包括'\0')而不是6(包括'\0')。

标签: c

解决方案


是的,这就是你所期望的。如果您想使用sizeof而不是strlen在阵列上,请小心:

char *null_terminated_array="hello";
char char_array[6]="hello";    

printf("null_terminated_array = %s\n",null_terminated_array);
printf("strlen(null_terminated_array) = %zu\n",strlen(null_terminated_array));
printf("sizeof(null_terminated_array) = %zu\n",sizeof(null_terminated_array));
printf("\n");
printf("char_array = %s\n",char_array);
printf("strlen(char_array) = %zu\n",strlen(char_array));
printf("sizeof(char_array) = %zu\n",sizeof(char_array));

对于我在此运行的平台,

null_terminated_array = hello
strlen(null_terminated_array) = 5
sizeof(null_terminated_array) = 8

char_array = hello
strlen(char_array) = 5
sizeof(char_array) = 6

明显的差异sizeof(null_terminated_array)与使用 32 位块(取决于平台)的自动内存分配有关。


推荐阅读