2017-11-18 4 views
0

함수에서 포인터의 (시작 부분에 비어있는) 데이터를 가져 오는 중입니다.C : char 포인터 (주소)에 정수 추가하기

char* data; 

그리고 내 작업은이 블록에서 서로 다른 유형의 데이터를 삽입하는 것입니다

이 포인터입니다. 데이터 유형 (문자열/int/float)과 바이트의 길이 만 알고 있습니다.

예를 들어, 삽입 정수, 나는 같은 형태가 각각 부여를 차단하려면 :

|block_num|age|weight|favorite_number| 

그래서 내 주요 질문, 어떻게 블록에 번호를 삽입하고 원하는 얻을 수 있습니까? 나는 매번 무게를 얻으려고 자료 [3]와 같은 smth를 원합니다.

memset 및 memcpy를 사용하려고했지만 성공하지 못했습니다.

시간 내 주셔서 감사합니다.

+0

'char * '가 가리키는 주소에'int'를 저장하고 싶습니까? – coderredoc

+0

올바르게 이해하면 함수가 다른 유형 (문자열/int/float/etc ..) 일 수있는 무언가를 반환하도록합니다. 기본 포인터 'char *'로 작업 한 후 캐스팅은 유형 안전하지 않은 것으로 간주됩니다. '데이터'를 보유 할 추상 기본 클래스를 정의하고이 클래스에 대한 몇 가지 순수 가상 메서드를 정의하는 것이 좋습니다. 함수는 다형성 방식으로 사용될 기본 클래스 포인터를 반환해야합니다. – PazO

+0

@ 파 조 :'C '에 대해 말하는거야? – coderredoc

답변

-1

주소가 char* 인 주소에 쓰기를 원할 경우 적절한 유형 (원하는 형식)으로 변환하고 역 참조해야합니다.

예 : (여기서 returnedFromFuncdata과 유사합니다. 마찬가지로

char *originalPtrValue = returnedfromFunc; // store it for future referece 
returnedfromFunc += sizeof intVar; 

당신이 그것을 액세스 할 수 있습니다 : -

char *returnedFromFunc = func(); 

당신은 당신이 이렇게 간단 할 다음 위치로 이동하려면 제대로 int*

*((int*)(returnedFromFunc))=intValue; 

에 캐스팅하여 int을 쓸 수 있습니다 저장중인 데이터 유형을 알고있는 경우에도 마찬가지입니다. 예를 들어

당신이 다른 위치에 액세스 할 수 sizeof 연산자를 사용하여이

printf("%d ", *((int*)(returnedFromFunc))); 

할 수 int

경우. (초기 char* 값으로부터 offseting).

작성할 수있는 메모리의 양을 알아야합니다. 그렇지 않으면 메모리에 쓸 수있는 권한이 없다는 뜻입니다 (바운드)