反向字符串函数给我一个分段错误

时间:2013-02-03 23:01:20

标签: c++ segmentation-fault

我正在研究我的C / C ++技能。我试图实现一个反转字符串的函数,但每次运行程序时我都会遇到分段错误(核心转储)。

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

void revstr(char *str);

int main()
{
    char *str = "hello mofo!";
    revstr(str);
    puts(str);

    return 0;
}

void revstr(char *str)
{
    int start = 0;
    int len = strlen(str);
    int mid = len / 2;
    int i, t;
    printf("start: %d, mid: %d,len: %d\n", start, mid, len);

    for ( i = start; i < mid; ++i )
    {
        printf("str[%d] swapping to str[%d]: %c, %c\n", i, len - 1 -i, str[i], str[len - 1 - i]);
        t = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = t;
    }
}

这个解决方案也给了我相同的seg错误:

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

void revstr(char *str);

int main()
{
    char *str = "hello mofo!";
    revstr(str);
    puts(str);

    return 0;
}

void revstr(char *str)
{
    char *end = str;
    char t;
    if ( str )
    {
        while ( *end != 0 )
            end++;
        end--;

        while ( str < end )
        {
            t = *str;
            *str++ = *end;
            *end-- = t;
        }
    }
}

1 个答案:

答案 0 :(得分:5)

char *str = "hello mofo!";

str是字符串文字,它默认为const,更改它是未定义的行为,您需要这样:

char str[] = "hello mofo!";