我从数据库函数返回一个字符串或NULL到主程序,有时我从异常中得到这个错误:
basic_string::_S_construct NULL not valid
我认为它是因为从数据库函数返回NULL值?任何想法???
string database(string& ip, string& agent){
//this is just for explanation
.....
....
return NULL or return string
}
int main(){
string ip,host,proto,method,agent,request,newdec;
httplog.open("/var/log/redirect/httplog.log", ios::app);
try{
ip = getenv("IP");
host = getenv("CLIENT[host]");
proto = getenv("HTTP_PROTO");
method = getenv("HTTP_METHOD");
agent = getenv("CLIENT[user-agent]");
if (std::string::npos != host.find(string("dmnfmsdn.com")))
return 0;
if (std::string::npos != host.find(string("sdsdsds.com")))
return 0;
if (method=="POST")
return 0;
newdec = database(ip,agent);
if (newdec.empty())
return 0;
else {
httplog << "Redirecting to splash page for user IP: " << ip << endl;
cout << newdec;
cout.flush();
}
httplog.close();
return 0;
}
catch (exception& e){
httplog << "Exception occurred in script: " << e.what() << endl;
return 0;
}
return 0;
}
答案 0 :(得分:24)
您无法从声明返回NULL
的函数返回0
(或string
),因为没有适当的隐式转换。您可能希望返回空字符串
return string();
或
return "";
如果您希望能够区分NULL
值和空字符串,那么您将不得不使用指针(智能指针,最好是),或者,您可以使用{{3} }
答案 1 :(得分:12)
从std::string
指针构造它是违反char
的合同。如果要构造它的指针为null,则返回一个空字符串。
E.g。
return p == NULL ? std::string() : std::string(p);
答案 2 :(得分:2)
我会尝试将其更改为返回空字符串而不是null并检查字符串长度。