我需要编写包含指向文本行的char指针的类和从参数列表中检索文本行的构造函数,动态分配内存并将行文本复制到组件类。 Writed programm无法正常工作。示例Error。 怎么了?请帮忙!
class A
{
char* text;
public:
A(char *line);
};
A::A(char *line) {
int length = strlen(line);
text = new char[length];
if (strlen(line) <= sizeof(text))
strcpy_s(text, length, line);
else
{
cout << text << endl;
cout << "Too long string" << endl;
}
}
int main()
{
A ob("aaaaaa");
system("PAUSE");
return 0;
}
答案 0 :(得分:2)
sizeof
运算符返回对象的大小(不是字符串的大小)。所以在这种情况下
sizeof(text)
它返回对象text
的大小。您将text
声明为
char* text;
因此它返回char*
的大小。确切的大小取决于系统,但我们猜测它是4
。因此,任何长度大于4
的字符串都将导致输出:
Too long string
如果我们查看字符串:“aaaaaa”长于4,那么你就得到了预期的输出。
我希望您正在尝试检查前一行是否成功。
text = new char[length];
但是在C ++中,new
将工作或抛出异常(导致该程序终止程序)。所以要么这条线工作,要么程序将退出。因此,无需检查new
的结果(与C不同,您应检查malloc()
的结果)
另请注意:您应该检查strcpy_s()
的结果,因为它会在失败时返回错误。由于您没有在目标中提供足够的空间,因此它将指示错误(您不为空终止符提供空间)。