나는 이와 같은 버퍼를 만들지 만 내용을주지는 않습니다. 그런 다음이 블록 메모리의 strlen()을 봅니다. 내가 무엇을 얻을Strlen() 할당 된 포인터
int size = 24;
char *c;
c = (char *)malloc(size);
printf("%d\n", strlen(c));
내가 다 [47]에 [40] C에서 값을 보려고 나는 항상 \ 0을 얻을 수 있지만, C 후 [47] 더 이상 null이 아닌 24 만 (40)이 아니다. size = 18로 설정하면 결과가 더 이상 40이 아닙니다. 그것은 32입니다. 그리고 c [32]에서 c [47]까지의 값은 모두 \ 0입니다. size = 7로 설정하면 결과는 24이고 c [24]에서 c [47]까지의 값은 모두 \ 0입니다.
malloc() 함수에 사용 된 크기를 줄 수없는 것처럼 배열에 strlen을 사용한다는 것을 알고 있습니다. 저는 왜 이런 일이 일어 났으며 크기의 가치를 바꿀 때 결과가 어떻게 변하는 지 궁금합니다. 이것을 사용하여 우리가 처리 할 수있는 것이 있습니까?
편집 : 결과가 예측할 수 없다고 모든 사람이 생각하는 것처럼 보입니다. 항상 8의 배수이고 크기를 늘리면 결과가 증가하는 한계가 있습니다. 우리는 결과의 변화를 가져 오는 크기의 값을 정확하게 결정할 수 있으며, 테스트를 여러 번 반복하더라도 변경되지 않습니다. 그것은 C 언어 나 컴파일러가 아닌 OS에 의존합니까? 왜 8 명이 선정 되었습니까?
정의되지 않은 동작, end of, case closed !! –
사이드 노트 : [malloc의 결과를 캐스팅하지 마십시오] (http://stackoverflow.com/q/605845/1233251). –