C++ 在C+;中执行字符串复制操作时出错+;
请解释为什么这是一个错误,但另一个运行良好 以下代码给出了错误:C++ 在C+;中执行字符串复制操作时出错+;,c++,C++,请解释为什么这是一个错误,但另一个运行良好 以下代码给出了错误: #include <iostream> #include <string> #include <conio.h> #include <math.h> #include <iomanip> #include <string.h> using namespace std; int main() { string s1,s2; int i;
#include <iostream>
#include <string>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
string s1,s2;
int i;
cout << "Enter the string to copy into another string : ";
getline(cin,s1);
for(i=0; s1[i]!='\0'; ++i)
{
s2[i]=s1[i];
}
s2[i]='\0';
cout<<"\n\nCopied String S2 is : "<<s2;
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串s1、s2;
int i;
cout在您的情况下,s2
被初始化为一个长度为0的空字符串,因此您无法写入超过边界的内容。如果您想,必须首先调整其大小:
s2.resize(s1.length());
对于(i=0;s1[i]!='\0';++i)
{
s2[i]=s1[i];
}
<> P> > C++ >代码> STD::String 不需要终止的Null字节,与C字符串不同。对于<代码> STD::String S2< /C> >代码> S2[i] <代码>在<代码> i>=s2.sisie()/<代码>时显示未定义的行为。在第一个例子中,它是<代码> s2。siz()==0
而不是简单地循环s2=s1;
将复制std::string
correctly@UnholySheep我的作业说,如果不使用内置函数,请帮助我找到另一种获得分数的方法。如果不使用“内置函数”,您无法复制std::string
std::string
的内部不是你可以随意处理的东西,它们对你是隐藏的(因为里面有很多优化)。s2[i]
调用std::string::operator[]
。为什么可以调用它,但不能调用std::string::operator=
?它的确切定义是什么“内置函数”,以及它如何区分std::string
类的这两个成员函数?
#include <iostream>
#include <string>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
char s1[100], s2[100], i;
cout << "Enter the string to copy into another string : ";
cin>>s1;
for(i=0; s1[i]!='\0'; ++i)
{
s2[i]=s1[i];
}
s2[i]='\0';
cout<<"\n\nCopied String S2 is : "<<s2;
return 0;
}