c_str()函数应用的一些问题

cainiao_c 2012-09-16 10:17:07
string aa;
char * bb = "abc";
strcpy_s((char *)aa.c_str(), strlen(bb) + 1, bb);
//这时候 aa 中有值 是“abc”
vector<string> vecStr;
vecStr.push_back(aa);
//但是这时候 vecStr中的第一个元素是空的string
//如果上边用的是直接赋值 aa = bb; 那下边的vector中就会有值
想问下这是怎么回事
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
- aa "abc" std::basic_string<char,std::char_traits<char>,std::allocator<char> >
- [actual members] {_Bx={...} _Mysize=0 _Myres=15 } std::basic_string<char,std::char_traits<char>,std::a……
[/Quote]
c_str() 返回的指针只能用于读,不能用于写。其有效期截止于下一次调用同对象的任何 non-const 成员函数。
cainiao_c 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
- aa "abc" std::basic_string<char,std::char_traits<char>,std::allocator<char> >
- [actual members] {_Bx={...} _Mysize=0 _Myres=15 } std::basic_string<char,std::char_traits<char>,std::allocator<char> ……
[/Quote]
灰常感谢 再问个具体点的问题
就是 用c_str() 得到的const char* 指针 能存在多久呢 我可以改变一个string.c_str() 的值么
改变 const_cast<char *>string.c_str()的值 可以改变string的值么
startservice 2012-09-16
  • 打赏
  • 举报
回复
- aa "abc" std::basic_string<char,std::char_traits<char>,std::allocator<char> >
- [actual members] {_Bx={...} _Mysize=0 _Myres=15 } std::basic_string<char,std::char_traits<char>,std::allocator<char> >
+ std::_String_val<char,std::allocator<char> > {_Alval={...} } std::_String_val<char,std::allocator<char> >
+ _Bx {_Buf=0x0012ff3c "abc" _Ptr=0x00636261 <错误的指针> } std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Bxty
_Mysize 0 unsigned int
_Myres 15 unsigned int


- cc "abc" std::basic_string<char,std::char_traits<char>,std::allocator<char> >
- [actual members] {_Bx={...} _Mysize=3 _Myres=15 } std::basic_string<char,std::char_traits<char>,std::allocator<char> >
+ std::_String_val<char,std::allocator<char> > {_Alval={...} } std::_String_val<char,std::allocator<char> >
+ _Bx {_Buf=0x0012ff08 "abc" _Ptr=0x00636261 <错误的指针> } std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Bxty
_Mysize 3 unsigned int
_Myres 15 unsigned int
[0] 97 'a' char
[1] 98 'b' char
[2] 99 'c' char

startservice 2012-09-16
  • 打赏
  • 举报
回复
应该用aa = bb;

strcpy_s((char *)aa.c_str(), strlen(bb) + 1, bb);
LZ强制操作写了string内部数据的句柄,aa是不完整的。

cainiao_c 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
把这句

C/C++ code

strcpy_s((char *)aa.c_str(), strlen(bb) + 1, bb);


改成这样

C/C++ code

aa = bb;
[/Quote]

这个我知道 我上边写了 我就是想知道为什么cpy 后就不行了
ri_aje 2012-09-16
  • 打赏
  • 举报
回复
把这句

strcpy_s((char *)aa.c_str(), strlen(bb) + 1, bb);

改成这样

aa = bb;

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧