ANSI C 컴파일러는 해당 매개 변수에 const 한정자가없는 함수 호출에서 문자열 리터럴 인수를 플래그로 사용하지 않는 이유는 무엇입니까? 예를 들어 다음 코드는 읽기 전용 메모리에 쓰기를 시도하여 예외를 생성 할 수 있습니다.문자열 리터럴 대 const char * in C
void somefunc(char buffer[10]);
void somefunc(char buffer[10]) {
int i;
for (i = 0; i < 10; i++)
buffer[i] = 0;
}
int main(int argc, char **argv) {
somefunc("Literal");
return 0;
}
이 상황은 컴파일 할 때 확인할 수 있지만 VS2010 및 gcc에서는 나타나지 않습니다. const char * 인수로 somefunc를 호출하면 컴파일러 경고가 생성됩니다.
좋은 질문 - gcc는'-Wextra '를 사용하더라도 이것을 포착하지 않습니다. –
함수를 선언 한 후 다음 줄을 정의하는 것은 무엇입니까? :) – GManNickG
Hans : 질문을 수정하여 ANSI C를 지정했습니다. 어쨌든 컴파일러 오류가 발생했다고 제안하지 않았습니다. 레벨 3 또는 4 경고는 단순히 잠재적으로 위험한 상황을 강조 표시합니다. – Robin