问题描述
const char* a;
我如何确保字符串'a'被终止?当a =" abcd"而我做大小(a)时,我得到4.这是否意味着它不是终止的?如果是,我会得到5?
推荐答案
如果您被递给了一个char阵列,该数组可能会或可能没有null端的数据,则确实没有一个好方法来检查.您能做的最好的方法是搜索最多指定长度的null字符(不是无限期!).但是0并不是在记忆的非原始区域中找到的数据的不寻常字节.
这是许多人不喜欢C的Defacto String标准的众多内容之一.查找符号的长度,您的双手是O(n)搜索操作,最好是最坏的分段故障.
另一个问题当然是阵列和指针是可以互换的.这意味着array_name + 2与&(array_name[2])相同,而sizeof(a)是sizeof(char*),而不是数组的长度.
其他推荐答案
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"无效终止;所有字符串文字均终止.
其他推荐答案
您得到4,因为这是系统上指针的大小.如果要获得nul终止字符串的长度,则需要在C标准库中的strlen函数.
相关问答
const char * const与 const char *?
char数组保证为null终止吗?
null终止char(\ 0)和`^@`之间的差异
c ++ const char* to const char* const
`const char * const` versus`const char *`?
const char*,char const*,const char const*&string Storage之间的差异
const char **和char **
const char []和const char*之间的差异
在抛出" char const*"实例后,C ++中的异常处理终止.
const char*Str\u Replace(const char*c,const char*sub,const char*s3)