1

可能重复:
不推荐从字符串常量到 char * 错误的转换

我正在用 C/C++ 编写一个程序,它试图通过 UDP 套接字进行通信。

我正在处理的代码有一个变量 ,char *servIP它是通过主函数的输入参数设置的。但是,我希望输入参数是可选的,所以我有代码:

if(argc > 1)
    servIP = argv[1];           /* First arg: server IP address (dotted quad) */
else
    servIP = "127.0.0.1";

servIP后来被转换成更网络可用的形式。

当我编译它时,我收到一条警告说“警告:不推荐使用从字符串常量到 char* 的转换”

我认为这不是输入该 IP 地址的正确方法;什么是更好的方法?

4

1 回答 1

4

声明servIP为 aconst char *而不是char *or,如果这不可能,strdup("127.0.0.1")(在第二种情况下,请free稍后记住)

修改字符串文字的效果是未定义的,这就是为什么 c++ 将类型“n const char 的数组”分配给字符串文字的原因。编译器警告您从 const 数据类型转换为非 const 数据类型。

您可以std::string改用,然后当您需要指向底层字符的 C 样式指针时,可以使用std::string::c_str()

于 2012-10-14T01:26:32.593 回答