null终止const char*的尺寸[英] sizeof for a null terminated const char*

本文是小编为大家收集整理的关于null终止const char*的尺寸的处理方法,想解了null终止const char*的尺寸的问题怎么解决?null终止const char*的尺寸问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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函数.

本文地址:https://www.itbaoku.cn/post/358956.html