Linux终端中C++的奇怪输出

Strange output from C++ in Linux Terminal

本文关键字:输出 C++ 终端 Linux      更新时间:2023-10-16

我最近开始学习使用C++语言进行编程。我写了一个简单的程序,用来反转我在终端中使用gcc/g++编译的字符串。

#include <iostream>
using namespace std;
string reverse_string(string str)
{
    string newstring = ""; 
    int index = -1;
    while (str.length() != newstring.length())
    {
        newstring.append(1, str[index]);
        index -= 1;
    }
    return newstring;
}
int main()
{
    string x;
    cout << "Type something: "; cin >> x;
    string s = reverse_string(x);
    cout << s << endl;
    return 0;
}

我已经重写了多次,但总是得到相同的输出:

Type something: banana
��

有没有人遇到过这样的问题,或者知道如何解决?

您的代码将index初始化为-1,然后使用str[index],但负索引在C++中没有合理意义。试着这样初始化它:

index = str.length() - 1;

我可以看到您的代码有几个问题。首先,您将index初始化为-1,然后将其递减。也许您的意思是auto index = str.length()-1;

我建议您查看std::reverse,它将完成您想要的工作。

然后您的主要功能变为:

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string x;
    cout << "Type something: ";
    cin >> x;
    reverse(x.begin(), x.end());
    cout << x << endl;
    return 0;
}

如果您真的想编写自己的反向函数,我建议使用迭代器而不是数组索引。另一种方法见std::reverse_iterator。

注意,以上操作将简单地反转字符串中的字节顺序。虽然这对ASCII来说很好,但对多字节编码(如UTF-8)来说不起作用。

您应该使用像valgrind这样的内存调试器。用它扫描二进制文件是一种很好的做法,可以节省很多时间。