繁体   English   中英

C++ strcat_s 字符串未终止 null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM