strcpy_s buffer L buffer太小&& 0

时间:2017-10-28 20:47:26

标签: c++ strcpy

我有一个问题。

我试图执行以下步骤:

    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解决这个错误? 谢谢!

2 个答案:

答案 0 :(得分:0)

sizeof(str)给出char*的大小,分配的数组的长度。要解决此问题,您必须提供分配的长度。在这种情况下,这将是

strcpy_s(str, len + 10, s);

答案 1 :(得分:0)

sizeof(str)返回char*的大小,这可能是48(字节),具体取决于实现。在您的情况下,它似乎是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风格的字符数组。