C++ C++;strcat_s字符串以null结尾
我的代码给了我一个错误: 调试断言失败 表达式:(L“字符串不以null结尾”&&0)C++ C++;strcat_s字符串以null结尾,c++,C++,我的代码给了我一个错误: 调试断言失败 表达式:(L“字符串不以null结尾”&&0) 类矩形{ 私人: char*objID; } 矩形::矩形(常数矩形和矩形){ std::cout应该是这样的 const char* psuffix = "(кoпия)"; size_t size = strlen(rect.objID) + strlen(psuffix) + 1; objID = new char[size]; strcpy_s(objID, size, rect
类矩形{
私人:
char*objID;
}
矩形::矩形(常数矩形和矩形){
std::cout应该是这样的
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\u s
/strcat\u
的第二个参数是缓冲区的长度,包括为\0
保留的空间,它应该类似于
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(((?);
strcpy_s(objID,strlen(objID),rect.objID);
创建时,objID
包含未初始化的内存。内存中充满随机数据。因此,strlen(objID)
不会返回在new
操作中分配的大小(strlen(rect.objID)+strlen((copy)+1
),而是返回随机数据的长度(以\0
字符结尾)
int size=strlen(rect.objID)+strlen(((?);
objID=新字符[大小];
strcpy_s(对象、大小、矩形对象);
objID=new char[strlen(rect.objID)+strlen(((?);
strcpy_s(objID,strlen(objID),rect.objID);
创建时,objID
包含未初始化的内存。内存中充满随机数据。因此,strlen(objID)
不会返回在new
操作中分配的大小(strlen(rect.objID)+strlen((copy)+1
),而是返回随机数据的长度(以\0
字符结尾)
int size=strlen(rect.objID)+strlen(((?);
objID=新字符[大小];
strcpy_s(对象、大小、矩形对象);
在C++中,首选代码> > STD::String 原始字符数组。<代码> STRLEN(Name)应该是 StrLLN(Rcc.name)
。实际上,保存长度比在同一字符串上调用strlen 3次要好。不能在指向非终止字符序列的字符指针上调用strlen
。如上所述,strlen(objID)
和strlen(name)是错误的。处理这些问题很棘手,这就是为什么我们有<代码> STD::String 。在C++中,更喜欢<代码> STD::String 原始字符数组。<代码> STRLEN(Name)< /C>应该是 StrLLN(Rcc.name)
。实际上,保存长度比在同一字符串上调用strlen 3次要好。不能在指向非终止字符序列的字符指针上调用strlen
。如上所述,strlen(objID)
和strlen(name)
是错误的。处理这些问题很棘手,这就是为什么我们有std::string
。