我试图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++;
}
}