Sau*_*tin 1 c++ pointers stdstring
我刚刚从char数组转移到std :: string而且我已经遇到了一个问题,我可能正在做一些非常愚蠢的事情,随意嘲笑:
int main()
{
string * p = new string;
memset(p, 0, sizeof(string));
expected_exepath(p);
cout << p->data;
delete p;
}
Run Code Online (Sandbox Code Playgroud)
错误在p-> data中,它表示"绑定到函数的指针只能用于调用函数".p是std :: string,所以我不明白为什么它认为我正在尝试叫一个功能.
因为数据是一个函数,而不是数据成员.更重要的是,一半std::string是它是一个价值.你不应该使用new,除非你有一个非常好的reason-分配在栈上,或者如果必须动态地分配使用的容器或智能指针.
另外:永远不要忘记这样的UDT.他们一直照顾自己的内部状态,不要乱用它.
错误在p-> data中,它表示"绑定到函数的指针只能用于调用函数".p是std :: string,所以我不明白为什么它认为我正在尝试叫一个功能.
几点:
string::data() 是一个函数,因此错误消息是完全合适的.
p是一个指针到一个std::string,而不是一个std::string.
传递p->data()给cout将是危险的,因为它data()返回一个没有空终止符的char数组,不像string::c_str().我建议你使用
cout << *p;
Run Code Online (Sandbox Code Playgroud)
...代替.
如果expected_exepath需要std::string*参数,那么我建议你重写这样的函数:
int main()
{
string p;
expected_exepath(&p);
cout << p;
}
Run Code Online (Sandbox Code Playgroud)