【发布时间】:2014-07-24 23:48:27
【问题描述】:
以下代码中止并在注释行出现分段错误错误。该行旨在对一个字符进行简单替换。
#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的参数和数据类型不能改变。
【问题讨论】:
-
修改字符串文字是未定义的行为。这是一个有类似问题的问题(还有更多):stackoverflow.com/questions/943312/…
-
是的,字符串字面量是常量。
-
搞笑,这是模拟考试,“num(char zf[], int n)”是老师提供的。完全不知道如何解决这个问题。
-
@thpetrus,不要给它一个字符串文字。给它一些它可以实际修改的东西。
标签: c