在C ++中传递给另一个函数的主函数中看不到值

时间:2019-02-24 03:32:12

标签: c++

我正在尝试将字符串的内容从一个变量复制到另一个变量。我没有任何错误,但是没有打印任何内容。任何帮助将不胜感激。

Following is the code:

#include <iostream>
using namespace std;

string strcopy(string &s1, string &s2)
{
     int i=0;
     for(i=0;s1[i]!='\0';i++)
     s2[i]=s1[i];

     s2[i]='\0';
     return s2;
}

int main()
{
    string str1,str2;
    cout<<"Enter a string:";
    getline(cin,str1);
    str2=strcopy(str1, str2);
    cout<<str2;
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您正在访问s2(对str2的引用)超出范围。 std::string::operator[]不会进行任何边界检查,并且绝对不会增加字符串的大小。

您似乎正在执行C类的字符串复制。在C ++中,这不是必需的。 std::string有一个operator=。使用它:

int main()
{
    std::string str1,str2;
    std::cout << "Enter a string:";
    std::getline(cin,str1);

    str2 = str1; // bam, so simple

    std::cout<<str2;

    return 0;
}

代码中的另一个错误是您不包括<string>。我建议避免使用using namespace std

答案 1 :(得分:0)

#include <iostream>

int main()
{
    string str1,str2;
    cout<<"Enter a string:";
    getline(cin,str1);
    stusing namespace std;

string strcopy(string &s1, string &s2)
{
     //int i=0;
     //for(i=0;i<s1.length();i++)
     //s2[i]=s1[i];

     //s2[i]='\0';
    s2=s1;
     return s2;
}

int main()
{
    string str1,str2;
    cout<<"Enter a string:";
    getline(cin,str1);
    str2=strcopy(str1, str2);
    cout<<str2;
    return 0;
}