当我把void*转换为char*时,得到了奇怪的输出。

问题描述 投票:0回答:1

这些是我的编译器标志。

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
c pointers char printf void
1个回答
0
投票

格式 %s 打印的是指针应该指向的字符串,而不是指针值本身。

如果把整数值看作是字符串,那么这个奇怪的符号就是整数值的任何表示法。很有可能某处有一个空字节,所以你只是运气好,没有在你手下爆炸。

所以你问题的题目最好是

当我把一个整数解释为字符串时,我得到了奇怪的输出。

© www.soinside.com 2019 - 2024. All rights reserved.