字符串反向错误

时间:2011-10-12 04:21:55

标签: c++ string

任何人都可以向我解释为什么我得到一个“.exe遇到了问题并且需要关闭”错误,它有时会编译和工作当我摆弄char数组时,但是当它工作时我有时会得到奇怪的字符字符串的结尾。

    #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;
}

4 个答案:

答案 0 :(得分:6)

您没有初始化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;
}

输出:

sllih derevoc wons ni noitcelfer ym waS

通过ideone

在线查看

答案 1 :(得分:3)

char *p;从未初始化,但p[start]用作作业的目的地。你不接受编译器警告吗?我甚至对“有时工作”感到惊讶。

答案 2 :(得分:0)

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

我强烈建议你

  • 阅读使用new和delete动态分配内存的主题,以了解一个非常重要的主题
  • 读入标准模板库,尤其是std :: string。您不应该使用像char *这样的原始指针,尽可能使用标准类型。

答案 3 :(得分:0)

#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;
}