4
#define LOG(format,...) Logger::Log(format,__VA_ARGS__)
#define STRIP(netIp) GeneralUtils::inet_ntop_(netIp)
string GeneralUtils::inet_ntop_(unsigned int netIp){
    char strIP[INET_ADDRSTRLEN];
    in_addr sin_addr;
    sin_addr.s_addr = netIp;
    inet_ntop(AF_INET, &sin_addr.s_addr, strIP, sizeof strIP);
    return string(strIP);
}

への呼び出し時:

LOG("src %s dst %s" ,STRIP(src_ip_));

コンパイルエラーが発生します:

cannot pass objects of non-trivially-copyable type ‘std::string {aka struct std::basic_string<char>}’ through ‘...’

varargs は c 互換であることを理解しているため、文字列を送信できません。それをバイパスする簡単な方法はありますか?次のように修正するのは正しいでしょうか。

#define STRIP(netIp) GeneralUtils::inet_ntop_(netIp).data()
4

2 に答える 2

5

const char *の代わりに渡すことができますstd::stringstd::string電話すれば受け取れますc_str()

于 2012-09-20T16:13:02.943 に答える
4
#define STRIP(netIp) GeneralUtils::inet_ntop_(netIp).data()

間違っている場合、終端のゼロが含まれていないため、未定義の動作が発生します。使用する

#define STRIP(netIp) GeneralUtils::inet_ntop_(netIp).c_str()

代わりは。

于 2012-09-20T16:13:56.780 に答える