strcpy_s缓冲区L缓冲区太小&& 0
问题描述:
我有一个问题。strcpy_s缓冲区L缓冲区太小&& 0
我试图proceede以下步骤:
char * str;
char * s="Hello";
int len = std::strlen(s);
str=new char[len +10];
strcpy_s(str,sizeof(str) ,s);
但PROGRAMM显示错误,这是我在标题写。
如果我用一个数字替换sizeof(str),例如256,弹出窗口出现,并且消息project.exe触发了一个断点。
我怎样才能解决这个错误与strcpy_s? 谢谢!
答
sizeof(str)
给出char*
的大小,即而不是分配数组的长度。要解决这个问题,你必须给出分配的长度。在这种情况下,这将是
strcpy_s(str, len + 10, s);
答
取决于实现的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样式的字符数组。
当标准库函数没有达到您的期望值时,请查看您调用它们的参数。打印值为'sizeof(str)'的值。 –