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

Reverse string function gives me a segmentation fault

本文关键字:一个 错误 分段 字符串 函数      更新时间:2023-10-16

我正在复习我的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: %dn", start, mid, len);
    for ( i = start; i < mid; ++i )
    {
        printf("str[%d] swapping to str[%d]: %c, %cn", 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;
        }
    }
}
char *str = "hello mofo!";

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

char str[] = "hello mofo!";
相关文章: