字符串反向程序抛出异常

时间:2010-09-12 23:30:06

标签: c++

// ExampleCodes.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<iostream>
using namespace std;    

char* stringReverse(char* s)    
{    

    char temp, *p,*q;    
    q = s;    
    while( *(++q));    
    for( p = s; p &lt; --q; p++)    
    {    
        temp = *p;    
        *p = *q;     
        *q = temp;    
    }    
    return s;    
}    


int _tmain(int argc, _TCHAR* argv[])    
{    

    stringReverse("StringReverse");    
    return 0;    
}    

5 个答案:

答案 0 :(得分:8)

您无法修改常量字符串文字。

stringReverse("StringReverse");

您可以改为使用字符数组:

char str[] = "StringReverse";

答案 1 :(得分:5)

不允许在C中修改字符串文字,如"StringReverse"。使用数组:

char str[] = "StringReverse";
stringReverse(str);

请注意,如果您为stringReverse()函数提供零长度字符串,则其{{1}}函数具有未定义的行为。

答案 2 :(得分:0)

你从未为p分配任何内存。您可以尝试p = new char[sizeof(s)];

答案 3 :(得分:0)

也许你应该这样写:

// in - string to reverse
// out - buffer for reversed string
// l - size of in

StringReverse(char* in, char* out, int l) {
  for (int i=0;i<l;i++) {
    out[l-(i+1)] = in[i];
  }
}

* []和*(p ++)/ *(p - )

之间的速度差别很小甚至没有

答案 4 :(得分:-1)

好吧,我打算清理OP中可怕的来源,但我只是发布一个更清洁的版本:

#include <stdio.h>
#include <string.h>

void reverse_string(char *s)
{
    char *q = s + strlen(s);
    for (char *p = s; p < --q; p++)
    {
        char temp = *p;
        *p = *q;
        *q = temp;
    }
}

int main()
{
    char s[] = "StringReverse";
    reverse_string(s);
    puts(s);
    return 0;
}

我希望你能成为一名学生。

Update0

这实际上是纯粹的C,所以要从它的性能中学习和敬畏,但不要开始像这样编写C ++。