c++ - 在 C++ 中查找字符数组的长度

标签 c++ function char sizeof

<分区>

我有一个形式的字符数组

char x[]='asdasdadsadasdas';
int p = sizeof(x)/sizeof(*x)

给我正确的结果,但是当我将其作为参数传递给另一个函数时,例如

void X(char* a)

int i = sizeof(a)/sizeof(*a)

我叫它

X(x)

p 和 i 不相等,怎么可能?

最佳答案

char 数组被传递给接受 char* 的函数时,该数组被称为“衰减”为指针。这种转换是自动的,之前编译器静态可用的长度信息丢失了。

可能的解决方案是:

  • 将数组的大小作为附加参数传递。
  • 使 char 数组以 0 结尾(即字符串文字)并使用 strlen。这是 C 和 C++ 中对字符串进行操作的常用方法。然而,这引入了并非绝对必要的运行时成本。但是,它提供了一些便利(静态和动态大小的字符串使用相同的 API)和错误恢复能力(长度始终正确)。
  • 使用模板获取数组的长度。 This is explained here. .

关于c++ - 在 C++ 中查找字符数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27638533/

相关文章:

c++ - C++错误:没有匹配的构造函数用于初始化

c++ - 插入排序链表C++

python - 如何使用相同的参数正确调用多个函数?

字符比较和处理变量

c++ - 使用在 C 字符串中定位的两个 char* 获取子字符串

c++ - 如何使用 WinRT 创建经典的 win32 应用程序窗口?

c++ - 如何基于循环迭代器选择函数

php - 当 woocommerce 产品中没有内容时隐藏自定义选项卡

perl - 单个字符串中对象返回的 HASH 元素

Java - 为什么我不能使用 charAt() 来查看一个字符是否等于另一个字符?