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

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

我在找一个解释,为什么有一个错误,是什么解决办法斯特尼函数num的参数和数据类型不可更改。

最佳答案

字符串文本被编译到程序中,并作为字节数组存储在二进制文件的某个位置您可以尝试在Linux中使用strings命令来查找二进制文件中的字符串文本。
字符串常量很可能存在于程序的只读部分,这就是为什么它被定义为未定义的行为来修改它们。当您试图访问或修改不应访问或修改的内存部分时,会发生分段错误。

09-09 19:22