替换字符数组中的char

thp*_*rus 1 c

以下代码在注释行中以分段错误错误中止.该行旨在简单地替换一个字符.

#include <stdio.h>
#include <ctype.h>

int num(char zf[], int n) {
    int i;

    for (i = 0; i < n; i++) {
        // assignment = seg fault
        if (zf[i] == ',') zf[i] = '.';

        if (!isdigit(zf[i]) && zf[i] != '+' && zf[i] != '-' && zf[i] != '.') {
            return 0;
        }
    }

    return 1;
}

int main(void) {
    if (num("-3+3,0", 6)) {
        printf("valid\n");
    } else {
        printf("not valid\n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个解释为什么会出现错误以及解决方案是什么?strncpy()函数?函数num的参数和数据类型不能更改.

Axe*_*ega 6

字符串文字被编译到程序中,并作为字节数组存储在二进制文件中的某个位置.您可以strings在Linux中尝试使用该命令在二进制文件中查找字符串文字.

字符串常量很可能存在于程序的只读部分中,这就是为什么它被修改为未定义的行为.当您尝试访问或修改不应访问或修改的内存部分时,会发生分段错误.