調査中に一般ルールをハッキングし、C
メモリアドレスを変数に保存しようとしましたが、コードが失敗しました。分割エラー(コアダンプ)64ビットシステムで実行している場合。その理由は、4/8ビット(32/64ビットシステム)メモリによるものです。問題は、uintptr_t
両方のシステムを満たすためにどの基本タイプが必要ですか?(いいえ)です。long long int
?私のソース:
int main() {
int i;
char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
unsigned int hacky_nonpointer;
hacky_nonpointer = (unsigned int) char_array;
for(i=0; i < 5; i++) {
printf("[hacky_nonpointer] points to %p, which contains the char '%c'\n",
hacky_nonpointer, *((char *) hacky_nonpointer));
hacky_nonpointer = hacky_nonpointer + sizeof(char);
}
}
答え1
適切なポインタ型を使用してください。
#include <stdio.h>
int main() {
int i;
char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
char *char_pointer = char_array;
for(i=0; i < 5; i++) {
printf("[char_pointer] points to %p, which contains the char '%c'\n",
char_pointer, *char_pointer);
char_pointer++;
}
}