c – string :: c_str查询
发布时间:2020-12-16 07:53:58 所属栏目:百科 来源:网络整理
导读:通过调用string :: c_str()返回的指针指向哪里?在下面的代码片段中,我想我会给出一个分段错误,但它给了我正确的输出.如果string :: c_str()返回的指针指向字符串对象内部的内部位置,那么当函数返回并调用对象析构函数时,我应该获得无效的内存访问. #include
通过调用string :: c_str()返回的指针指向哪里?在下面的代码片段中,我想我会给出一个分段错误,但它给了我正确的输出.如果string :: c_str()返回的指针指向字符串对象内部的内部位置,那么当函数返回并调用对象析构函数时,我应该获得无效的内存访问.
#include <iostream> #include <string> using namespace std; const char* func() { string str("test"); return str.c_str(); } int main() { const char* p = func(); cout << p << endl; return 0; } Output: test Compiler: g++ 4.3.3 Platform: ubuntu 2.6.28-19 解决方法
它指向内存中的某个位置,其中包含std :: string内容的以null结尾的字符串. 指针仅在修改或销毁std :: string之前有效.如果再次调用c_str()或data(),它也可能无效. 基本上,你最安全的选择是假设下次你对std :: string对象做某事时,从c_str()获得的指针无效.
不,你得到未定义的行为.您可能会遇到某种类型的内存访问错误(如分段错误),但您的程序似乎也可能继续正常运行.它可能看起来有一次运行你的程序,但下一次失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |