以下代碼在註釋行中出現分段錯誤錯誤時終止。該行旨在做一個字符的簡單替換。替換字符數組中的char
#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;
}
我正在尋找一個完美的原因,爲什麼有一個錯誤,這是什麼解決方案? strncpy()函數?函數num的參數和數據類型不會被改變。
修改字符串文字是未定義的行爲。這裏有一個類似的問題(還有更多):http://stackoverflow.com/questions/943312/segmentation-fault-char-pointer?rq=1 – chris
它是[未定義的行爲來修改字符串文字] (http://stackoverflow.com/questions/19372952/modifying-a-char-const-string) –
是的,字符串文字是常量。 –