Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想知道为什么这两种输出是不同的 < P>我用C++连接MySQL来完成一些操作,这是我的代码的一部分。 const char* deleteLog_query = DeleteLog(userIDstr).c_str(); cout<<deleteLog_query<<endl; const char* deleteReplyOfLog_query = DeleteReplyOfLog(userIDstr).c_str(); mysql_query(&mysql_conn,deleteReplyOfLog_query); mysql_result = mysql_store_result(&mysql_conn); const char* deleteShareOfLog_query = DeleteShareOfLog(userIDstr).c_str(); mysql_query(&mysql_conn,deleteShareOfLog_query); mysql_result = mysql_store_result(&mysql_conn); cout<<deleteLog_query<<endl; mysql_query(&mysql_conn,deleteLog_query); mysql_result = mysql_store_result(&mysql_conn); if(mysql_result!=0) cout<<"\t right delete!"<<endl; const char*deleteLog\u query=deleteLog(userIDstr).c_str(); cout_C++_Mysql_C - Fatal编程技术网

我想知道为什么这两种输出是不同的 < P>我用C++连接MySQL来完成一些操作,这是我的代码的一部分。 const char* deleteLog_query = DeleteLog(userIDstr).c_str(); cout<<deleteLog_query<<endl; const char* deleteReplyOfLog_query = DeleteReplyOfLog(userIDstr).c_str(); mysql_query(&mysql_conn,deleteReplyOfLog_query); mysql_result = mysql_store_result(&mysql_conn); const char* deleteShareOfLog_query = DeleteShareOfLog(userIDstr).c_str(); mysql_query(&mysql_conn,deleteShareOfLog_query); mysql_result = mysql_store_result(&mysql_conn); cout<<deleteLog_query<<endl; mysql_query(&mysql_conn,deleteLog_query); mysql_result = mysql_store_result(&mysql_conn); if(mysql_result!=0) cout<<"\t right delete!"<<endl; const char*deleteLog\u query=deleteLog(userIDstr).c_str(); cout

我想知道为什么这两种输出是不同的 < P>我用C++连接MySQL来完成一些操作,这是我的代码的一部分。 const char* deleteLog_query = DeleteLog(userIDstr).c_str(); cout<<deleteLog_query<<endl; const char* deleteReplyOfLog_query = DeleteReplyOfLog(userIDstr).c_str(); mysql_query(&mysql_conn,deleteReplyOfLog_query); mysql_result = mysql_store_result(&mysql_conn); const char* deleteShareOfLog_query = DeleteShareOfLog(userIDstr).c_str(); mysql_query(&mysql_conn,deleteShareOfLog_query); mysql_result = mysql_store_result(&mysql_conn); cout<<deleteLog_query<<endl; mysql_query(&mysql_conn,deleteLog_query); mysql_result = mysql_store_result(&mysql_conn); if(mysql_result!=0) cout<<"\t right delete!"<<endl; const char*deleteLog\u query=deleteLog(userIDstr).c_str(); cout,c++,mysql,c,C++,Mysql,C,让我们以这一行为例: const char* deleteLog_query = DeleteLog(userIDstr).c_str(); 假设DeleteLog函数按值返回一个字符串对象,那么返回的对象是一个临时对象,一旦表达式DeleteLog(userIDstr).c_str()完成,它将被销毁。这意味着返回的指针现在将指向不再存在的字符串,取消引用该指针将导致未定义的行为 另一方面,如果DeleteLog返回对字符串对象的引用,那么如果它是对非静态局部变量的引用,则会出现类似但同样糟

让我们以这一行为例:

const char* deleteLog_query = DeleteLog(userIDstr).c_str();
假设
DeleteLog
函数按值返回一个字符串对象,那么返回的对象是一个临时对象,一旦表达式
DeleteLog(userIDstr).c_str()
完成,它将被销毁。这意味着返回的指针现在将指向不再存在的字符串,取消引用该指针将导致未定义的行为

另一方面,如果
DeleteLog
返回对字符串对象的引用,那么如果它是对非静态局部变量的引用,则会出现类似但同样糟糕的情况。函数结束时,函数中的局部非静态变量超出范围,对这些变量的引用不再有效,使用它们也会导致未定义的行为

那么,你的问题的解决方案是什么?如果这是第二个问题(返回对非静态局部对象的引用),则需要让它按值返回字符串。这就给了我们第一个问题,解决方法是不保存指向临时对象的指针,而是使用适当的
std::string
对象,并在实际需要时使用
c_str()
(例如在实际调用
mysql\u query
时)