#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()
答案 0 :(得分:5)
您可以传递const char *
而不是std::string
。您可以通过致电std::string
c_str()
获取此信息
答案 1 :(得分:4)
#define STRIP(netIp) GeneralUtils::inet_ntop_(netIp).data()
错误,它将调用未定义的行为,因为它不包含终止零。使用
#define STRIP(netIp) GeneralUtils::inet_ntop_(netIp).c_str()
代替。