【发布时间】:2012-04-04 14:42:34
【问题描述】:
为什么这不起作用:
SomeClass::SomeClass(char *lit) //Ctor
{
str = new char[strlen(lit)+1]; // str is a pointer to char in SomeClass
strcpy(str,"have");
cout << str << " " << "In Ctor" << " +Size=" << strlen(str)<< endl;
}
上面的代码显示了一个长度为 0 的字符串。但是这段代码有效:
SomeClass::SomeClass(char *lit)
{
char newstr[strlen(lit)+1];
strcpy(newstr,"have");
cout << newstr << " " << "In Ctor" << " +Size=" << strlen(newstr)<< endl;
}
Here是完整的代码。
编辑:
添加了指向 Ideone 的链接,在我回答问题后 OP 删除了该链接。
没有源代码的链接,这个问答是没有用的。
【问题讨论】:
-
请制作一个完整、简短程序来演示您所看到的错误。请参阅sscce.org 了解更多信息。
-
在这两种情况下,您都将数组的大小调整为传入字符串
lit的长度。有什么保证lit至少有四个字符长? -
@amit:不,C++ 没有 VLA,尽管一些编译器(例如 gcc)将它们作为扩展包含在内。在不相关的说明中,是否有充分的理由经历所有这些回旋而不是仅仅使用
std::string? -
请使用您的复制和粘贴工具发布实际的程序输出和/或错误消息,而不是“不起作用”。
-
为什么要删除源代码的链接?没有它,Q 和答案对于将来遇到类似问题的任何人都是无用的。请将其编辑回 Q!
标签: c++ arrays string character