다음 코드는 주석 처리 된 행에서 세그먼트 오류 오류와 함께 중단됩니다. 라인은 한 문자를 간단하게 대체하기위한 것입니다.문자 배열 안의 문자를 교체하십시오.
#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) –
그래, 문자열 리터럴은 상수입니다. –