【问题标题】:Socket programming in C/C++ - gcc char * warning [duplicate]C/C++ 中的套接字编程 - gcc char * 警告 [重复]
【发布时间】:2012-10-14 01:23:54
【问题描述】:

可能重复:
Deprecated conversion from string constant to char * error

我正在用 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 地址的正确方法;有什么更好的方法?

【问题讨论】:

  • 请注意,您最终可以检查argv[1] 的内容是否是有效的IP 地址。
  • 您是否意识到,您的问题与“套接字编程”、“UDP”.. 无关?
  • 您是用 C 还是 C++ 编程?它们是两种不同的语言。
  • 问题解决方案,感谢@Karoly Horvath,只需要做:char ip[] = "127.0.0.1"; servIP = ip;

标签: c++ c


【解决方案1】:

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

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

你可以改用std::string,然后当你需要一个指向底层字符的C风格指针时,你可以使用std::string::c_str()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多