chararray 的 size 和 length 不相同。
chararray 的 size 和 length 不相同。
这个问题已经有了答案:
我已经有了几年的Python、C#和Java经验,现在才开始学习C语言。
我在一篇教程中学到,char anything[]
总是指针。(今天,有人告诉我这是错误的)——我认为我的问题与此有关。
尽管如此,我仍在尝试获取char数组的长度:
#include int get_string_length(char * string) { int length = 0; while(string[length] != '\0') { char c = string[length]; length++; } return length; } int get_string_size(char * string) { return sizeof(string); } int main() { printf("%d\n", get_string_size("hello world")); // returns 8 printf("%d\n", get_string_length("hello world")); // returns 11 printf("%d\n", sizeof("hello world")); // returns 12 -> Okay, because of '\0'-char return 0; }
结果:
8
11
12
那么,为什么我的get_string_size
方法返回的是8而不是12呢?(因为它们都只调用了sizeof()
)
admin 更改状态以发布 2023年5月23日
使用strlen()来确定字符串的长度。
使用sizeof()来确定字符串长度是危险的,应该避免使用。sizeof()返回给定类型的大小,而在这种情况下,给定类型是指针(因为系统大小为8,说明您的系统是64位的)。
考虑以下代码及其输出:
char string[] = "This is a test"; char *pointer = string; printf("sizeof string: %zu\n", sizeof(string)); printf("sizeof pointer: %zu\n", sizeof(pointer)); printf("strlen pointer: %zu\n", strlen(pointer)); sizeof string: 15 sizeof pointer: 8 strlen pointer: 14
char anything[]
是指针吗?不完全是这样。
字面量"hello world"
的实际类型是const char[12]
。(注意多出的用于NUL终结符的一个元素。)
但当将其传递给函数时,该类型会衰减为一个const char*
。
因此,get_string_size
返回sizeof(const char*)
,在您的平台上为8(即char*
的sizeof),但sizeof("hello world")
是sizeof(const char[12])
,因为sizeof(char)
被C标准定义为1。
get_string_length
返回从其传递的指针开始的第一个NUL终结符的位置。
最后,需要注意使用%zu
作为sizeof
返回类型的格式指示符:在技术上,printf("%d \ n",sizeof("world"));
的行为是未定义的。