Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中执行字符串复制操作时出错+;_C++ - Fatal编程技术网

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;
}