[英]C++ strcat_s String is not null terminated
我的代码给了我一个错误:
调试断言失败。
表达式:(L"字符串不是 null 终止" && 0)
class Rectangle {
private:
char* objID;
}
Rectangle::Rectangle(const Rectangle& rect ) {
std::cout << "Copy constructor for: " << rect.objID << std::endl; // отладочный вывод
objID = new char[strlen(rect.objID) + strlen("(кoпия)") + 1];
strcpy_s(objID, strlen(objID), rect.objID);
strcat_s(objID, strlen(objID), "(копия)");
name = new char[strlen(rect.name) + 1];
strcpy_s(name,strlen(name), rect.name);
A=rect.A;
B=rect.B;
}
它应该是这样的;
const char* psuffix = "(кoпия)";
size_t size = strlen(rect.objID) + strlen(psuffix) + 1;
objID = new char[size];
strcpy_s(objID, size, rect.objID);
strcat_s(objID, size, psuffix);
size_t size2 = strlen(rect.name) + 1;
name = new char[size2];
strcpy_s(name, size2, rect.name);
strcpy_s
/ strcat_s
的第二个参数是缓冲区的长度,包括您为\0
保留的空间。
objID = new char[strlen(rect.objID) + strlen("(кoпия)") + 1]; strcpy_s(objID, strlen(objID), rect.objID);
在创建时, objID
包含未初始化的 memory。 它充满了随机数据。 因此strlen(objID)
不会返回在new
操作中分配的大小( strlen(rect.objID) + strlen("(copy)") + 1
),但会返回随机数据的长度(以\0
字符结尾) .
int size=strlen(rect.objID) + strlen("(кoпия)") + 1;
objID = new char[size];
strcpy_s(objID, size, rect.objID);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.