为什么这个程序表现得像这样?
#include <stdio.h>
main()
{
char *p = "Pointers";
printf("%s", p);
}
输出:指针
这里我尝试使用“* p”打印字符串值,但在编译时崩溃。如果我使用“p”打印值,则表示打印字符串而不是“p”
的内存位置地址请帮助解决此问题
答案 0 :(得分:2)
printf
需要%s
格式说明符的指针。如果您传入*p
,则会取消引用p
并实际传入字符串的第一个字节(例如&#39; P&#39;)。然后printf
正在处理第一个&#39; P&#39;将您的字符串作为指针,并将其引导至无效的内存位置。
作为一般规则,在C中,您通常不会按值传递字符串。而是将指针传递给字符串。
答案 1 :(得分:0)
如果您想要打印p
变量的地址的值[vs.它指向的是什么,使用:
printf("%p\n",&p);
这将为您提供堆栈上p
的地址,该地址应该是一个相当高的内存地址(例如0x7ffdb4066268
)。
如果您希望p
所指向的字符串常量的地址为{字符串],执行:
printf("%p\n",p);
您将获得0x400xxx