【发布时间】:2010-12-04 04:57:03
【问题描述】:
我有一堂课,private char str[256];
为此我有一个显式构造函数:
explicit myClass(const char *func)
{
strcpy(str,func);
}
我称之为:
myClass obj("example");
当我编译这个时,我收到以下警告:
不推荐将字符串常量转换为 'char*'
为什么会这样?
【问题讨论】:
-
您应该使用
strncpy(str, func, 255)而不是strcpy(str, func)以获得更安全的副本。然后不要忘记在字符串末尾添加 '\0',因为 strncpy 不会添加它。 -
更安全的说法是 "strncpy(str, func, sizeof(str)); str[sizeof(str) - 1] = '\0';"
-
我不认为上面给出了你引用的警告,尽管我确信非常相似的代码会。为了获得有意义的答案,您应该发布一个产生警告的最小编译示例。
-
@Patrice, Warren:不要使用 strncpy,它不是更安全的 strcpy 版本。使用(或重新实现)strcpy_s。
-
我遇到了问题,它只显示了 -X86 构建的这些问题,而不是普通的 solaris 或 ARM(target) 构建,所以我忽略了这一点。仍然找不到修复程序,因为它也不会正常显示我的示例代码的警告。谢谢大家!
标签: c++ string explicit-constructor