在上面的代码中编译器在strlen((char*)arr);处报错:initializer element is not constant
时间: 2024-04-13 07:29:53 浏览: 88
C++中char*转换为LPCWSTR的解决方案
5星 · 资源好评率100%
抱歉,我之前的回答有误。在C语言中,数组的初始化必须使用常量表达式,而不能使用运行时的函数。因此,在初始化数组时使用 `strlen()` 函数是不允许的,会导致编译错误。
如果你想获取数组 `arr` 的长度,可以使用 `sizeof` 运算符来计算数组的大小。例如:
```c
#include <stdio.h>
int main() {
char arr[] = "Hello";
size_t len = sizeof(arr) - 1;
printf("字符串长度:%zu\n", len);
return 0;
}
```
在上面的代码中,我们定义了一个字符数组 `arr`,并将其初始化为字符串常量 `"Hello"`。然后,我们使用 `sizeof(arr)` 来计算数组 `arr` 的大小,并通过减去 1 来得到字符串的长度,因为数组大小包括了结尾的空字符 `\0`。
请注意,这种方法只适用于字符数组,而不适用于指向动态分配内存的指针。如果你使用指针来表示字符串,那么需要使用 `strlen()` 函数来计算字符串的长度。
再次对之前的回答给你带来的困惑表示抱歉,并感谢你的指正。如果还有其他问题,请随时提问。
阅读全文