我有一个问题。
我试图执行以下步骤:
char * str;
char * s="Hello";
int len = std::strlen(s);
str=new char[len +10];
strcpy_s(str,sizeof(str) ,s);
但是程序显示错误,我在标题中写道。
如果我用一个数字(例如256)替换sizeof(str),会出现一个弹出窗口,其中包含project.exe触发断点的消息。
如何用strcpy_s解决这个错误? 谢谢!
答案 0 :(得分:0)
sizeof(str)
给出char*
的大小,不分配的数组的长度。要解决此问题,您必须提供分配的长度。在这种情况下,这将是
strcpy_s(str, len + 10, s);
答案 1 :(得分:0)
sizeof(str)
返回char*
的大小,这可能是4
或8
(字节),具体取决于实现。在您的情况下,它似乎是4
,这不足以容纳构成"Hello"
文字的字符加上空终止字符。由于空间不足,strcpy_s函数会调用undefined behavior。您需要至少6
个字节,这是空字符的字符数+ 1
字节。同样代替str=new char[len + 10];
,您可能意味着str = new char[len + 1];
适应\0
字符。因此,您的代码应该是:
#include <iostream>
int main(){
char* str;
char* s = "Hello";
int len = std::strlen(s);
str = new char[len + 1];
strcpy_s(str, len + 1, s);
}
据说更喜欢std::string到C风格的字符数组。