0

我正在复习我的 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;
    }
}

这个解决方案也给了我同样的段错误:

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

1 回答 1

5
char *str = "hello mofo!";

str是字符串文字,默认为const,更改它是未定义的行为,你想要这个:

char str[] = "hello mofo!";
于 2013-02-03T23:03:15.587 回答