运行时错误反转字符串

时间:2013-03-08 01:29:09

标签: c++ string runtime-error reverse

我知道返回结束不正确,我正在考虑使用我的一个指针去结束,然后按字符串的大小返回以返回反向字符串。有没有更有效的方法呢?另外,更重要的是,我在这里遇到运行时错误吗? http://ideone.com/IzvhmW

#include <iostream>
#include <string>

using namespace std;

string Reverse(char * word)
{
    char *end = word;
    while(*end)
        ++end;
    --end;

    char tem;
    while(word < end) {
             tem = *word;
             *word = *end;
             *end = tem;  //debug indicated the error at this line

             ++word;
             --end;
    }

    return end;
}

int main(int argc, char * argv[]) {
    string s = Reverse("piegh");
    cout << s << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您正在将“piegh”传递给Reverse,后者将转换为指向char的指针。指向char的指针指向只读字符串文字。也许你打算在尝试分配它之前复制字符串文字“piegh”:

char fubar[] = "piegh";
string s = Reverse(fubar);

毕竟,你怎么能证明"piegh"[0] = "peigh"[4];

答案 1 :(得分:-1)

这段代码的作用是什么?   while(*end) ++end; //Assuming you are moving your pointer to hold the last character but not sure y --end; //这个 while(word < end) //我也不确定这是如何运作的

此代码适用于同一目的

    char* StrReverse(char* str)
{
int i, j, len;
char temp;
char *ptr=NULL;
i=j=len=temp=0;

len=strlen(str);
ptr=malloc(sizeof(char)*(len+1));
ptr=strcpy(ptr,str);
for (i=0, j=len-1; i<=j; i++, j--)
{
    temp=ptr[i];
    ptr[i]=ptr[j];
    ptr[j]=temp;
}
return ptr;
}