c++ - c++中令人困惑的事情

标签 c++ c++11

我正在尝试将一个字符数组以相反的顺序复制到另一个字符数组中。

这是我的方法:

void reversString(char* str){
    char* ptr = str;

    int i = 0;
    // getting length of str/ptr array
    while (*(ptr + i) != '\0'){
        i = i + 1;
    }

    char revStr [i];
    char * revStrChar = &revStr[0];
    int revStrPos = 0;

    cout << *(ptr + 3) << endl;

}

这里我只是试图按正常顺序复制它,但是如果我打印输入的最后一个字母(“abcd”),什么也不会发生。它只打印一个空行。

但是如果我删除一个新的字符数组的声明:

void reversString(char* str){
    char* ptr = str;

    int i = 0;
    // getting length of str/ptr array
    while (*(ptr + i) != '\0'){
        i = i + 1;
    }

    //char revStr [i];
    //char * revStrChar = &revStr[0];
    //int revStrPos = 0;

    cout << *(ptr + 3) << endl;

}

然后它正确地打印出最后一个字母,即“d”。我不明白声明一个新的 char 数组会如何影响输出! (编译器为minGW,操作系统为Win10)

最佳答案

您标记了 C++11 。 . .为什么不以更现代的 STL 方式真正做到这一点:

#include <iostream>
#include <string>
#include <algorithm>


int main()
{
   std::string str{"12345abc"};
   std::string copy = str;
   std::reverse(copy.begin(), copy.end());

   std::cout << copy << std::endl;

   return 0;
}

输出:

cba54321 

关于c++ - c++中令人困惑的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40259404/

相关文章:

c++ - 更新一个 QTableView

c++ - 如何使我的 sizeof sum 结构与空参数包一起工作

c++ - 删除函数 unique_ptr

c++ - 如何对 BSD 套接字进行单元测试

c++ - 构造函数委托(delegate)如何与非静态数据成员初始化交互?

c++ - 无法将 QString 转换为 WChar 数组

c# - 互操作将字符串从 C# 发送到 C++

c++ - Pre C++20 位字段零初始化

c++ - 如何在同一列表中存储指向任意类类型的方法指针?

c++ - 如何初始化对象指针列表