字符串反转错误



谁能向我解释为什么我得到一个".exe遇到了一个问题,需要关闭"的错误,它编译和工作有时当我摆弄字符数组,但当它工作时,我有时在字符串的末尾得到奇怪的字符。

    #include <iostream>
using namespace std;
char* StrReverse3(char*);
char* StrReverse3(char* str)
{
    char *p;
    int length=0,start=0,end=0;
    length=strlen(str);
    for(start=0,end=length-1;end>= 0,start<=length-1;end--,start++)
    {
        p[start]=str[end];
    }   

    return p;
}
int main()
{
  char str[100]="Saw my reflection in snow covered hills";
  StrReverse3(str);
cin.get();
return 0;
}

您不是在初始化p,您要写入的是一个未初始化的指针。

因为你是用c++写的,而不是C,我建议使用std::stringstd::reverse:

#include <string>
#include <algorithm>
#include <iostream>
int main()
{
    std::string str = "Saw my reflection in snow covered hills";
    std::reverse(str.begin(), str.end());
    std::cout << str;
    return 0;
}
输出:

<>之前缓慢的发展赢得了更多的财富之前

查看它在ideone的在线工作

char *p;从未初始化,但p[start]被用作赋值的目标。你没有得到编译器警告吗?

您正在访问不是由程序分配的内存(p可以指向任何地方!)这就是你遇到问题的原因。

我强烈建议你

  • 读入动态分配内存的主题,用new和delete来理解一个非常重要的主题
  • 读入标准模板库,特别是std::string。你不应该使用像char*这样的原始指针,尽可能使用标准类型。
#include <iostream>
#include <cstring>
using namespace std;
char* StrReverse3(char* str){
    int length=0,start=0,end=0;
    length=strlen(str);
    for(start=0,end=length-1;end > start;end--,start++){
        char temp;
        temp = str[start];
        str[start]=str[end];
        str[end]=temp;
    }
    return str;
}
int main(){
  char str[100]="Saw my reflection in snow covered hills";
  cout << StrReverse3(str);
  cin.get();
  return 0;
}

相关内容

最新更新