398
2016-03-15 19:05:38
0
1. 이유는 무엇인가요?
c는 디폴트로 패딩이 있습니다. struct padding으로 공부 하시면 감이 오실테고요.
일반 변수도 일정한 간격으로 공간을 잡습니다. 5바이트 선언하면 제 머리엔 10바이트로 잡힙니다.
제가 공부할때는 최소 10바이트 잡는다가 포직스 표준이였습니다... 전에 비슷한 문제로 답글을 단적 있었는데, 12바이트가 잡힌경우가 있고
이유는 저도 모르겠습니다... 차라리 2,4,8,16 간격이면 더 이해하기가 쉽겠는데... 10 간격으로 잡힙니다.
결론은 5th까지는 사용해도 되는 영역.. 나머지 10th까지는 padding영역으로 쓰면 안되지만, 쓴다고 죽진 않습니다.
그리고, c는 널포인트 접근하지 않는이상 런타임 에러 같은거 없습니다... 그래서 c++이나 java에는 범위 결정문이 있어서
런타임 오류가 납니다.
2. 정상적으로 진행? ==> 패딩
3. ' ('가 없어졌습니다. 왜?
넣지 않는 문자가 나오는 곳은 6th이후 입니다... 10개까지 찍어보시면 내가 넣지 않는 문자.. 즉 이상한 문자들을 모실수 있습니다.
참고로 재미있는 코드도 하나 해보세요
int a, b, c, d;
a = 10; b=11;c=12;d=13;
char buff[5];
int a1, b1, c1, d1;
a1 = 10; b1=11;c1=12;d1=13;
buff[-1] = 'a';
for(....//print...);
버퍼에 0보다 작은값 넣으면 안돌거 같죠?... 돕니다.. 아주 잘 돌아요.
동적분석에서 오류가 납니다... 컴파일러에 따라서는 컴파일 안되는 경우도 있는데..
사용하시는 gcc는 될겁니다.