gpt4 book ai didi

C++ strcpy 非常量表达式作为数组绑定(bind)

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:32 25 4
gpt4 key购买 nike

在 C#、PHP 和其他东西上呆了很长时间后,我又回到了 C++,我发现了一些奇怪的东西:

temp.name = new char[strlen(name) + strlen(r.name) + 1];

这个编译

temp.name = (char *)malloc(sizeof(char[strlen(name) 
+ strlen(r.name) + 1]));

这不是(temp.name 是一个 char *)

编译错误是

error C2540: non-constant expression as array bound

有谁知道问题可能是什么以及如何解决?谢谢。

最佳答案

sizeof(...) 需要一个常量编译时表达式。 strlen 不是编译时表达式,它是一个需要执行才能得到结果的函数。因此,编译器无法为这样声明的数组保留足够的存储空间:

char c[strlen("Hello")];

虽然字符串的长度明明是5,但是编译器不知道。

为了避免这个陷阱,不要在这里使用sizeof。相反:

char* c = (char*)malloc(strlen(name)+strlen(rname)+1);

这会返回一个指向 n 个字节的指针。 sizeof(char)==1 始终为真,因此缓冲区中的字节数等于您可以在其中存储的字符数。要 malloc 不同类型的数组,乘以一个数组元素的静态大小:

int* c = (int*) malloc(sizeof(int)*100);

这没问题,因为 sizeof 应用于编译时表达式。当然,C++ 方式更简洁:

int* c = new int[100];

关于C++ strcpy 非常量表达式作为数组绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2127978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com