这些是我的编译器标志。
clang -std=c11 -Wall -Wextra -Werror -Wpedantic
int main(void) {
unsigned int arr = 23;
void *ptr = &arr;
printf("%u\n", (unsigned int)ptr);
printf("%lu\n", (unsigned long)ptr);
printf("%p\n",ptr);
char *s = ptr;
printf("\n%s\n", s);
}
我不明白,我怎么能把void* ptr赋给char *s。这样,我想在输出中使用它。
1822581628
140730721002364
0x7ffe6ca2637c
0x7ffe6ca2637c
但我一直得到这样的奇怪符号
1822581628
140730721002364
0x7ffe6ca2637c
// <-- there is a weird symbol
格式 %s
打印的是指针应该指向的字符串,而不是指针值本身。
如果把整数值看作是字符串,那么这个奇怪的符号就是整数值的任何表示法。很有可能某处有一个空字节,所以你只是运气好,没有在你手下爆炸。
所以你问题的题目最好是
当我把一个整数解释为字符串时,我得到了奇怪的输出。