이 프로그램은 사용자가 읽은 문자열을 변수 i가 점유하고 지나간 메모리에 씁니다. 이것은 정의되지 않은 동작이므로 아무 것도 발생할 수 없습니다.
무엇 실제로 일어나는 것은 컴퓨터 int
에 4 개 char
의 크기이며, ASCII로 변환하여 CPU에 바이트 순서에서 숫자로 해석 할 때 문자 "지옥", 숫자로 밝혀이다 1819043176. 문자열의 나머지 부분 인 문자 o와 종료 문자는 사용자 컴퓨터에 저장된 위치의 끝을 지나치게됩니다. 그래서 scanf
하는 일은 이것이다 : 바이트 68 65 6c 6c
가 INT에 저장되는 경우가 수 0x6c6c6568
, 또는 10 진수의 1819043176
으로 해석이야 있도록
h e l l o \0
|68 65 6c 6c|6f 00 ...
| i|memory past i
당신은, 리틀 엔디안 시스템에서이 작업을 실행 할 것으로 보인다.
int
이 다른 크기이거나 다른 문자 세트 (예 : ASCII 대신 EBCDIC)를 사용하거나 CPU가 빅 endian 바이트 순서를 사용하거나 프로그램이 메모리 쓰기가 바인드 된 환경에서 실행되는 경우 -checked, 당신은 다른 결과 또는 프로그램 충돌을 얻을 것이다. 즉, 정의되지 않은 동작입니다.
[정의되지 않은 동작] (http://en.wikipedia.org/wiki/Undefined_behavior)으로 알려진 현상이 있습니다. –