2017-11-18 69 views
0

我從函數獲取指向塊(開始時爲空)的數據的指針。C:將整數添加到字符指針(地址)

這個指針是:

char* data; 

而我的工作就是在此塊中插入不同類型的數據。我只知道數據類型(字符串/整數/浮點數)及其以字節爲單位的長度。

例如,對於一個插入整數,我想給每個塊像一種形式:

|block_num|age|weight|favorite_number| 

所以我的主要問題是,我怎麼可以插入數塊,並讓他們喜歡?我希望像數據[3]一樣每次都能減輕體重。

我試圖使用memset和memcpy,但沒有成功。

謝謝你的時間!

+0

你想在'char *'指向的地址中存儲'int'嗎? – coderredoc

+0

如果我理解正確,你希望你的函數返回可能是不同類型的東西(string/int/float/etc ..)。使用基本指針'char *',然後投射被認爲不是類型安全的。我建議你定義抽象基類,它將保存'數據'併爲這個類定義幾個純虛擬方法。您的函數應該返回將以多態方式使用的基類指針。 – PazO

+0

@PazO .:你在說「C」嗎? – coderredoc

回答

-1

如果您想寫入char*指向的地址,則需要將其轉換爲正確的類型(您需要)並將其解除引用。

例如:(這裏的returnedFromFunc類似於您的data)。

char *returnedFromFunc = func(); 

您可以通過它適當地鑄造int*

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

int要轉到你會簡單地做到這一點,下一個位置: -

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

同樣,你可以訪問它同樣如果你知道你正在存儲的數據的類型。

例如,如果它是int

你可以做到這一點

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

使用sizeof操作,您可以訪問不同的位置。(從最初的char*值offseting)。

您需要知道您可以在哪裏寫入多少內存。否則有可能嘗試寫入你沒有權限的內存(超出範圍)