我是一个初学者,现在正在学习如何在C语言中复制字符串。
我遇到的问题如下:
每次我尝试使用“strcpy”命令从字符串1复制到字符串2时,Visual Studio 2013都会给出一个错误/警告消息,提示我“strcpy”不安全,并建议我使用strcpy_s代替。
请问为什么使用strcpy是不安全的?有哪些更安全的替代方案?
这是我的代码:
#include<stdio.h>
#include<string.h>
main()
{
char str1[] = "Copy a string.";
char str2[15];
char str3[15];
int i;
/* with strcpy() */
strcpy(str2, str1);
/* Without strcpy() */
for (i = 0; str1[i]; i++)
str3[i] = str1[i];
str3[i] = '\0';
/* Display str2 and str3 */
printf("The content of str2: %s\n", str2);
printf("The content of str3: %s\n", str3);
return 0;
}
P.S. 我正在使用 Windows 7 64 位旗舰版上的 Visual Studio 2013 64 位终极版。
非常感谢你的时间!
strncpy
也不安全时,事情变得有趣了。他们希望你使用strncpy_s
,它添加了第二个参数表示大小,并修改了strncpy
的标准行为,使得截断的字符串附加一个空终止符。不用说,所有这些_s
函数都是非标准的,我通常只需要定义一个特定的预处理器定义来消除那个警告。 - Andon M. Colemanint main(void)
或int main(int argc, char **argv)
。 - wildplasserstrcpy()
是一个完全安全的函数(不像gets()
函数)。然而,很多程序员编码水平不佳,然后要求使用更“安全”的编程语言。真是一群胆小鬼。 - EOFchar str2[sizeofstr1];
而不是像15
这样的魔法数字。让编译器计算所需的大小。 - chux - Reinstate Monica