-Theory C 메모리에 다른 종류 읽어쓰기
I는 다른 유형의 변수 S 세트가 있고 지금 S.의 크기와 메모리 어드레스 포인터 P의 좌표를, I S의 모든 값을 P로 지정하고 다시 읽으 려합니다.
이 문제는 수동으로 구조체와 비슷한 것을 구축하는 데 있습니다.
내가 그랬어 어쩐 :
우리가 여기서 문제는 내 할당하고 있습니다 것입니다
uint8_t* foo(int i, char c, char* s) {
uint8_t* r = malloc(sizeof(i) + sizeof(c) + sizeof(s));
*r = i;
*(r+sizeof(i)) = c;
*(r+sizeof(i)+sizeof(c)) = s;
return r;
}
int main(void) {
uint8_t * a = foo(500, 'a', "hello");
printf("%d, %c, %s\n", *a, *(a+sizeof(int)), (a+sizeof(int)+sizeof(char)));
return 0;
}
우리의 S 등의 난, 숯불 c 및 숯불 * s의하는 int가 있다고 가정하자 데이터를 첫 번째 바이트로만 읽은 다음 첫 번째 바이트 만 읽습니다.
년 - 질문 : 컴파일러를 어떻게 알 수
그 * r에에에 foo = 난; i를 * r의 다음 4 바이트에 할당 한 다음 주 읽기 *를 a로 4 바이트로 지정한 다음 c 및 s에 대해 동일한 작업을 수행합니까?
'sizeof (s)'가 함수에 전달 된 문자열 데이터에 대해 아무 것도 말하지 않는다는 것을 알기를 바랍니다. 그것은 포인터의 크기입니다. –
예, 나는 포인터를 포함하여 어떤 타입도 저장하는 것을 신경 쓰지 않는다 – Naheel
'* (r + sizeof (i) + sizeof (c)) = s;'는 문자열을 복사하지도, 문자열 포인터를위한 공간도 없다 'uint8_t'에 있습니다. –