中令人困惑的事情

中令人困惑的事情

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

这是我的方法:

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”),则什么也不会发生。它只打印一个空行。

但是,如果我删除新的char数组的声明:

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/

10-11 21:05