const char* a;
如何确保字符串'a'以空字符结尾?当a = "abcd"且使用sizeof(a)时,结果为4。这是否意味着它没有以空字符结尾?如果是的话,我会得到5吗?
sizeof(a)
返回的是指针的大小,而非指针所指向的字符数组的大小。这和使用 sizeof(char*)
的效果相同。
您需要使用 strlen()
来计算以 null 结尾的字符串的长度(请注意,返回的长度不包括 null 终止符,因此 strlen("abcd")
是 4,而不是 5)。或者,您可以使用字符串字面值初始化一个数组:
char a[] = "abcd";
size_t sizeof_a = sizeof(a); // sizeof_a is 5, because 'a' is an array not a pointer
字符串字面值 "abcd"
以 null 结尾;所有字符串字面值都以 null 结尾。
你得到了4
,因为在你的系统上指针大小为4。如果你想获取以null结尾的字符串的长度,你需要使用C标准库中的strlen
函数。
strnlen
是特定于平台的函数,不在标准库中。 - jersizeof()
和一个运行时操作字符串长度。当你运行sizeof(a)
时,得到4的原因是a
是一个指针,而C语言中指针的典型大小是4字节。要获取字符串长度,请使用strlen
。char*
,无法100%保证它已正确地以null结尾。必须非常小心地确保生产者和消费者之间的char*
合同清楚地规定了由谁终止字符串。a
的内存需求是strlen(a)+1
,以处理空终止符。这是C语言中需要一点时间来适应的部分之一。 - JaredParsizeof(a)
是 sizeof(const char*)
,表示指针的大小。它不受 a
的内容影响。如果要计算长度,可以使用 strlen
。
此外,所有源代码中的双引号字符串字面量(如"abcd"
)都会自动添加空字符结尾。
sizeof(a) 返回的是 const char *a
的尺寸... 而非它所指向的对象的尺寸。你可以使用 strlen(a)
来获取以空字符结尾的字符串的长度,但需要注意的是,strlen 的结果不包括空字符。
const
,所以const char a[]
比char a[]
更好。 - ascheplerstrlen()
函数只能获取字符数组中数据的逻辑长度,而不能获取为其分配的字节数。我认为没有办法获取该数字。 - T.E.D.