【发布时间】:2021-02-03 11:27:19
【问题描述】:
在下面的代码中,我在 mingw 编译器上只得到字符串 a 作为输出,但我在在线编译器上得到两个字符串作为输出。为什么我的系统没有得到适当的输出?
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string a="Welcome";
string b="HelloWorld";
for(int i=0;i<=b.length();i++){
a.push_back(b[i]);
}
cout<<a<<endl<<b;
return 0;
}
输出- 欢迎HelloWorld
【问题讨论】:
-
i<=b.length()是错误的。试试<。 -
值得注意的是,您将一个零字节从
b[b.size()]复制到a。它定义明确,但可能你的终端在输出时会感到困惑。 -
@n.'pronouns'm。这并没有像“导致UB”那样错——错了。它只会将
\0附加到a。但这很可能不是故意的,是的。 -
@Scheff 它是为非常量版本定义的,只要你不修改那个空字节。
标签: c++