可能的重复项:
已弃用从字符串常量到 char * 错误的转换
我正在用 C/C++ 编写一个程序,该程序试图通过 UDP 套接字进行通信。
我正在处理的代码有一个变量 char *servIP
,它是通过 main 函数的输入参数设置的。但是,我希望输入参数是可选的,所以我有代码:
if(argc > 1)
servIP = argv[1]; /* First arg: server IP address (dotted quad) */
else
servIP = "127.0.0.1";
servIP
稍后会转换为更可用于网络的形式。
当我编译它时,我收到一条警告,指出"警告:从字符串常量到 char* 的不推荐使用的转换"。
我认为这不是输入该IP地址的正确方法;什么是更好的方法?
servIP
声明为const char *
而不是char *
,或者,如果不可能,strdup("127.0.0.1")
(在第二种情况下,请记住稍后free
它)
修改字符串文本的效果是不确定的,这就是 C++ 将类型"N 常量字符数组"分配给字符串文本的原因。 编译器会警告您从 const 数据类型到非 const 数据类型的转换。
您可以改用 std::string
,然后当您需要指向基础字符的 C 样式指针时,可以使用 std::string::c_str()。