<分区>
我有一个形式的字符数组
char x[]='asdasdadsadasdas';
int p = sizeof(x)/sizeof(*x)
给我正确的结果,但是当我将其作为参数传递给另一个函数时,例如
void X(char* a)
int i = sizeof(a)/sizeof(*a)
我叫它
X(x)
p 和 i 不相等,怎么可能?
<分区>
我有一个形式的字符数组
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)和错误恢复能力(长度始终正确)。关于c++ - 在 C++ 中查找字符数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27638533/