2011-03-26 5 views

답변

4

당신은 혼합 const/비 const 배열 또는 문자열을 만들 수 없습니다. 덮어 쓰지 않는 \0은 프로그램의 불변량에 의해 보장되어야합니다.

1

할 수 없다. 적절한 연습을 통해이를 보장해야한다.

1

엄밀히 말하면, 아니오. 일부 시스템에서는 링커로 playng하면 비슷한 것을 얻을 수 있습니다. "var"의 주소를 지정하고 강제로 "읽기 전용"섹션 앞에 5 바이트가되도록합니다. 그러나 이것은 극소수의 경우에만 작동하며 어쨌든 C 언어의 일부가 아닙니다.

0

아니요, 읽기 전용 메모리 위치에 대한 개념은 C에 전혀 존재하지 않습니다. C 프로그래머는 메모리를 할당/액세스/조작 할 때 자체적으로 남겨지며 자신이하는 일을 알고 있다고 가정합니다. D. 그러한 것은 원시 권력에서 나오는 책임입니다 : D.

C++로 전환 할 수 있으면 std :: vector를 사용하는 것이 좋습니다. 버퍼 오버 플로우는 std :: vectors에서도 여전히 가능하지만 클래스 인터페이스에 포함 된 메소드를 사용할 때는 덜 유용합니다. 이 메소드는 요소 액세스 및 삽입을 추상화하므로 명시 적으로 메모리를 관리 할 필요가 없습니다. 반복기를 사용하지 않으면 벡터 크기 밖에있는 요소에 직접 액세스 할 수 있습니다.

오버플로는 c/C++에서 반복되는 문제이므로 프로그래머가 이러한 실수를하는 데 도움이되는 몇 가지 도구가 있습니다. 도구는 정적 언어 분석기에서 디버그 모드에서 비보호 메모리 액세스의 런타임 감지까지 다양합니다.

0

을 추적하는 const char * ptr을 사용하십시오.

+0

그건 도움이되지 않습니다. 'const char * const ptr'조차 도움이되지 않습니다. 포인터를 통한 특정 문자에 대한 액세스는'const'에 의해 제한되지만 원래 배열을 통한 액세스에는 제약이 없습니다. – pmg

관련 문제