c++新手遇到一个问题,百度不到答案,想请教大家。

string s;
s = "abc"+'b';
cout<<s<<endl;
代码的输出是:crt\crtw32\stdcpp\locale0.cpp
string s;
s = "abc";
s += 'b';
cout <<s << endl;
代码的输出是:abcb
想请教一下这是什么原因?


#笔试题目#
全部评论
    "abc"是字符串字面量,类型可以理解成是 const char[4],     "abc"存放在程序的只读代码段中的.rodata中,你可以理解成在内存某个地方,假设其起始地址是0x7ffcb5ea8e88, 方便理解的话,如果有const char* p = "abc", p的值就是0x7ffcb5ea8e88     'b&(1071)#39;是字符字面量,类型是char,'b&#39;的ASCII码值为98,对p进行加法操作,编译器实际上进行的是sizeof(char) * 98 + 0x7ffcb5ea8e88;你把这个结果赋值给s,而s类型为string,在C++里面string是一个类,重载了operator=(const char* p),会把p指向的内容赋給s,但是p的值经过刚刚的加法操作被我们改变了,它指向的地方是sizeof(char) * 98 + 0x7ffcb5ea8e88,里面的内容自然不是我们想要的,所以会看到一串乱码。 下面那个正常是因为string类里重载了operator+=(char c),函数里面进行的操作可以理解成s1.push_back(c)。
7 回复 分享
发布于 2021-01-11 18:45
Cpp里面字符串是指针定义的,两个指针不能加,但是下面的变量加指针可以的
2 回复 分享
发布于 2021-01-11 16:30
因为string是一个类,这个类里面只重载了operator+=,所以可以用+=进行字符或字符串追加,但是string类里面并没有重载operator+,所以不能用+操作符进行字符串追加
1 回复 分享
发布于 2021-01-12 09:46
害,这就是C++坑爹的地方,C字符串和string类经常搞混。我也经常犯错。不要随便对字符串做四则运算,况且C++的string类也是很奇怪的。
1 回复 分享
发布于 2021-01-11 21:25
搁这玩python
点赞 回复 分享
发布于 2021-01-15 02:00
单引号和双引号的问题,楼上正解
点赞 回复 分享
发布于 2021-01-12 10:13
单独的“a+b”是字符串常量,属于不可修改;
点赞 回复 分享
发布于 2021-01-11 22:32
第一个代码输出:"crt\crtw32\stdcpp\locale0.cpp"?
点赞 回复 分享
发布于 2021-01-11 17:50
点赞 回复 分享
发布于 2021-01-11 16:07

相关推荐

点赞 评论 收藏
分享
就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务