谁能解释为什么运行以下代码仅显示换行符?

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
    int x = 12;
    char *s = (char *) &x;
    printf("%s\n", s);
    return 0;
}


由于我们将&x强制转换为字符串,因此x地址(大概是十六进制的内存地址)的字符串表示形式不应该打印出来吗?

最佳答案

字符串是字符序列,以特殊字符'\0'终止。当您使用"%s"格式打印字符串时,printf函数将地址作为基地址并从该基地址打印字符,直到找到终止符为止。如果“字符串”实际上不是字符串,则为undefined behavior

如果要打印地址,则应使用"%p"格式:

printf("Address of variable x is %p\n", (void *) &p);

关于c - 困惑为什么功能不打印地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30452162/

10-11 23:08
查看更多