没有获得任何字符串输出

时间:2013-07-02 12:19:06

标签: c++ string

我没有获得str2的任何输出。为什么呢?

#include <iostream>

using namespace std;

int main() {   
    string str1,str2;
    int t_cases,i,j,length;

    cin>>t_cases;

    for (i=0;i<t_cases;i++)
    {
        cin>>str1;
        length=str1.length();

        for (j=0;j<length;j++)
            str2[j]=str1[length-1-j];

        cout<<str2<<endl;;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:8)

str2为空,让您访问它,就好像它的大小非零:

str2[j]=str1[length-1-j];

这是未定义的行为

您可以从一开始就将str2初始化为正确的大小(在第一个循环内):

for (i=0;i<t_cases;i++)
{
    cin>>str1;
    length=str1.length();
    std::string str2(length, ' '); // string with t_cases spaces

或默认构造它,并按照@saviourself(也在第一个循环中)的建议附加到它:

for (i=0;i<t_cases;i++)
{
    cin>>str1;
    length=str1.length();
    std::string str2
    for (j=0;j<length;j++)
        str2 += str1[length-1-j];

答案 1 :(得分:3)

str2为空,只需添加

 str2.resize(length);

它应该工作

因为你在做什么是不安全的:

  

如果pos不大于字符串长度,则函数永远不会   抛出异常(无抛出保证)。否则,它会导致未定义   行为。

答案 2 :(得分:1)

您正在调用未定义的行为。 str2长度为0,您尝试在结束后写入数据。如果您使用str.at(j),它将中止。

调整str2的大小或附加新值。