C++ 字符串复制的风险

C++ 字符串复制的风险,c++,C++,我只是使用微软的VisualStudio2013研究了c/c++字符串,发现了一个关于strcpy函数的问题。 我发现即使没有足够的内存,你也可以成功地使用strcpy。这样使用有风险吗 const char* s5 = "hello!"; char* cs6 = new char[1]; strcpy_s(cs6, strlen(s5) + 1, s5); 代码: 找到一个关于strcpy函数的问题。我发现即使没有足够的内存,你也可以成功地使用strcpy。有没有风险 如

我只是使用微软的VisualStudio2013研究了c/c++字符串,发现了一个关于strcpy函数的问题。 我发现即使没有足够的内存,你也可以成功地使用strcpy。这样使用有风险吗

const char* s5 = "hello!";
char* cs6 = new char[1];
strcpy_s(cs6, strlen(s5) + 1, s5);
代码:

找到一个关于strcpy函数的问题。我发现即使没有足够的内存,你也可以成功地使用strcpy。有没有风险

如果您正确使用strcpy\u s,则不会,如下所示:

int buffer_size = 1; // this is silly since null terminated buffer 
                     // of size 1 can only fit a string of length 0
char* cs6 = new char[buffer_size];
strcpy_s(cs6, buffer_size, s5);
cs6[buffer_size - 1] = '\0';
上面的代码是完全安全的。然而:

这样使用有风险吗

const char* s5 = "hello!";
char* cs6 = new char[1];
strcpy_s(cs6, strlen(s5) + 1, s5);
是的,有风险。这种行为没有定义。最佳情况:程序崩溃。更糟糕的情况是:一名黑帽黑客利用这一行为窃取了你的数据,而法律规定你不得泄露这些数据

找到一个关于strcpy函数的问题。我发现即使没有足够的内存,你也可以成功地使用strcpy。有没有风险

如果您正确使用strcpy\u s,则不会,如下所示:

int buffer_size = 1; // this is silly since null terminated buffer 
                     // of size 1 can only fit a string of length 0
char* cs6 = new char[buffer_size];
strcpy_s(cs6, buffer_size, s5);
cs6[buffer_size - 1] = '\0';
上面的代码是完全安全的。然而:

这样使用有风险吗

const char* s5 = "hello!";
char* cs6 = new char[1];
strcpy_s(cs6, strlen(s5) + 1, s5);

是的,有风险。这种行为没有定义。最佳情况:程序崩溃。更糟糕的情况是:黑帽黑客利用这种行为窃取您的数据,法律规定您不得泄露这些数据。

这是未定义的行为。您正在写入不属于程序的内存位置。在某些情况下,它可以正常运行,在另一些情况下,它可以破碎。这是一种未定义的行为。您正在写入不属于程序的内存位置。在某些情况下,它可以正常运行,在其他情况下,它可以破碎!我明白了,非常感谢~我想补充一下,潜在缓冲区溢出漏洞涉及的风险是为什么你总是喜欢使用“代码> STD::String < /Cube >(因为你使用C++,并有选择的方式)在“C字符串”上。我明白了,非常感谢~我想补充一下,潜在缓冲区溢出漏洞涉及的风险是为什么您总是喜欢在“C字符串”上使用<代码> STD::String < /C> >(因为您使用C++,并且可以选择这样做)。