为什么此代码会产生分段错误?

-3 c

在第18行,我在第一次迭代(i = 0)中得到一个seg错误.

#include <stdio.h>

int main(void) {
    char* str = "mono";

    int length = 0;
    int i;

    for (i = 0; ; i++) {
        if (str[i] == '\0') {
            break;
        } else {
            length++;
        }
    }
    for (i = 0; i < length / 2; i++) {
        char temp = str[length - i - 1];
        str[length - i - 1] = str[i]; // line 18
        str[i] = temp;
    }

    printf("%s", str);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我写这个算法来反转一个字符串.

oua*_*uah 8

您正在修改字符串文字:

char* str = "mono";
Run Code Online (Sandbox Code Playgroud)

和字符串文字在C中是不可修改的.

要解决您的问题,请使用由字符串文字初始化的数组:

char str[] = "mono";
Run Code Online (Sandbox Code Playgroud)