【发布时间】:2010-01-24 17:25:37
【问题描述】:
在 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 是一个字符 *)
编译错误是
错误 C2540:非常量表达式 作为数组绑定
有谁知道问题可能是什么以及如何解决?谢谢。
【问题讨论】:
-
如果您使用 C++,请忘记 char 数组并使用 std::string。
-
虽然程序文本看起来相同,但语义却大不相同。 C++ 中有 数组类型的大小为零或运行时值。但是这些数组类型只能由
new-type-id寻址。声明数组的类型说明符不使用新类型 ID,因此它们无法表示这些“花哨”类型。尝试编写new (char[strlen(name)]);或new (char[0]);并注意使用符合标准的编译器也会失败:因为括号会使编译器形成type-id而不是new-type-id。类似地,sizeof需要type-id。
标签: c++ arrays pointers character