谁能解释为什么运行以下代码仅显示换行符?
#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/