以下代码在注释行中以分段错误错误中止.该行旨在简单地替换一个字符.
#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的参数和数据类型不能更改.
字符串文字被编译到程序中,并作为字节数组存储在二进制文件中的某个位置.您可以strings在Linux中尝试使用该命令在二进制文件中查找字符串文字.
字符串常量很可能存在于程序的只读部分中,这就是为什么它被修改为未定义的行为.当您尝试访问或修改不应访问或修改的内存部分时,会发生分段错误.