c - 为什么这段代码会产生段错误?

标签 c

在第 18 行,我在第一次迭代中遇到了段错误 (i = 0)。

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

我编写了这个算法来反转字符串。

最佳答案

您正在修改字符串文字:

char* str = "mono";

并且字符串文字在 C 中是不可修改的。

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

char str[] = "mono";

关于c - 为什么这段代码会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21148420/

相关文章:

c - 使用 CC 编译器 (Solaris) 时链接 unistd.h

c - C语言中的字符串输入问题

函数错误类型冲突

c - 链接期间的外部功能?

c - GCC - 将 int 分配给 char 时不应该发出警告吗?

c - 返回具有多个值的两个变量

c - nanosleep 和/dev/rtc 的性能差异

c - 使用 cmake find_package 在包中查找

c - 为什么从 inptr 读入数组的值不同于 fgetc(inptr) 给出的值?

c - 三角形上的光线追踪球体阴影