-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 iとして、char型のC、およびするchar * sのint型持っていると言うことができますデータを第1のバイトのみに変換し、第1のバイトのみを読み出す。
-The質問:
は、どのように私がfooの* R = Iにコンパイラに伝えることができます。 iを* rの次の4バイトに割り当て、次にメインの読み込み* aを4バイトとして割り当て、次にcとsについて同じことをしますか?
'sizeof(s)'は関数に渡される文字列データについて関数に何も伝えていないことを祈っています。これはポインタのサイズです。 –
はい、私は、ポインタを含む任意の型を格納しても構いません – Naheel
'*(r + sizeof(i)+ sizeof(c))= s;'は文字列をコピーせず、文字列ポインタ'uint8_t'にあります。 –