我是C ++的新手,这个问题对许多人来说似乎微不足道,但是请记住,我只是在开始使用C ++语言。
我已将变量分配x
为equal,20
并希望将其与字符串连接。我的C ++代码如下。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
int x = 20;
int y = 15;
if (x >= y) {
cout << x + " is greater than " + y;
}
}
我的预期结果是20 is greater than 15
,但是结果却有些奇怪é@
。我很困惑,在GeeksForGeeks,w3schools或SO的其余部分上找不到解决方案。
我知道使用cout << x << " is greater than " << y;
效果很好,但是我不确定为什么串联在这里不起作用。另外,为什么这些奇怪的字符反而出来呢?
提前致谢。
(另外,请不要不回答这个问题留下一个答案。我记得开始的时候JS我问一个问题,唯一的答案是“不使用document.write
。”虽然我得到的,它会是更好的选择实际上回答了问题并将其作为旁注。)
之所以得到一些奇怪的输出,是因为C ++是C演变的一部分历史。在表达式中x + " is greater than " + y
,表达式" is greater than "
是const char*
文字,它是原始的C样式类型。std::string
由于向后兼容的原因,它不是C ++类类型。
您的+
符号会将整数加到const char*
。这导致指针运算。基本上" is greater than "
是a const char*
,它是指向内存缓冲区的指针,该缓冲区的内容为的ASCII字节" is greater than "
。加上x
和的效果y
是将指针移到右边的35个字节,它将离开缓冲区的末尾并读取未初始化的内存。那就是出现的“奇数字符”。正确地说,这是未定义的行为,因此任何事情都可能发生。尽管在实际系统中,这只是缓冲区溢出读取,导致出现乱码。
正如其他人指出的那样,解决此问题的方法是std::to_string
在整数上使用。然后,代替int + const char* + int
您将得到std::string + const char* + std::string
更好的处理。
如果不清楚,您可以查找指针,C风格的字符串和缓冲区溢出以获取更多信息。
编辑:从技术上讲字符串文字是,const char[]
但是为了清楚起见,我省略了它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句