1

構造体オブジェクトまたは構造体へのポインターが与えられた場合、オブジェクトの前に、たとえば x バイトのメモリを読み取るにはどうすればよいでしょうか? たとえば、オブジェクトがアドレス 10 から始まることがわかっている場合、アドレス 10-x からアドレス 9 までの x バイトを読み取るにはどうすればよいでしょうか? ありがとうございました。

4

2 に答える 2

1

Nitzan Shakedがコメントで述べたように、ポインターをキャストして(char *)、バイトレベルでポインター演算を実行できるようにします。次に、ポインター演算を実行し(減算する必要があるバイト数を減算します)、それを読み取りに必要なタイプのポインターにキャストします。

于 2013-03-14T04:31:05.947 に答える
1

任意のアドレスからバイトを読み取るのは簡単です。次のように、ポインターを achar*にキャストし、目的のバイト数を減算して、読み取りを開始するだけです。

struct MyStruct {
    int x;
    int y;
} test[100];
...
void *ptr = &test[50];
...
char *start = (char*)prt;
start -= 10;
// You can read from the start pointer now

読み込もうとしているメモリが、アプリケーションがアクセスできるものであることを確認する必要があります。メモリは、静的または動的に割り当てたより大きな構造の一部である必要があります。そうしないと、未定義の動作となり、クラッシュにつながる可能性があります。

于 2013-03-14T04:32:30.500 に答える