은 이미 어느 정도 비슷한 질문 (why this code works in C)을 읽었습니다하지만 실제로 실제로 작업이 코드 조각 이유를 설명 도착하지 않습니다이 코드가 실제로 작동하는 이유는 무엇입니까?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct example
{
char length[2];
} STRUCT;
int main (void)
{
STRUCT test;
strcpy(test.length, "********");
puts(test.length);
return 0;
}
내가 그것을 컴파일 CodeBlocks를 사용하고, 그래서 I 디폴트로 여분의 별표를 저장하기 위해 문자열에 더 많은 공간을 할당한다고 생각합니다 ... 나는 정말로 모른다. 어쩌면 나는 운이 좋다, 그러나 그것을 실행할 때마다 그것은 작동한다.
위 예제에서 2의 배열에 2 개의 요소를 넣었습니다. 여기서 문자열은 처리 할 수있는 것보다 많은 공간을 사용하고 있습니다.
http : //en.wikipedia.org/wiki/Buffer_overflow 그리고 네, 운이 좋습니다. 할당 한 범위를 벗어난 상태로 작성하는 것은 정의되지 않은 동작이므로 OS 충돌 (또는 더 심한 경우)에 이르기까지 모든 문제가 발생할 수 있습니다. –
프로그램에 [* 정의되지 않은 동작 *]이 표시됩니다 (http : // en.wikipedia.org/wiki/Undefined_behavior) 부적절합니다. 달리기, 행운, 비강 악마 (http://www.catb.org/jargon/html/N/nasal-demons.html)를 얻는 것은 행운입니다. –
정의되지 않은 동작에 오신 것을 환영합니다. 이것은 최악의 종류의 정의되지 않은 동작입니다. 코드가 작동합니다. 정말로 진절머리 나는 일이 일어날 때까지 수 년 동안 일할 것입니다. 때로는 CNN이나 slashdot에서 끝나기도합니다. – pm100