为什么这个程序会这样?
#include <stdio.h>
main()
{
char *p = "Pointers";
printf("%s", p);
}
输出:指针
这里我尝试使用“*p”打印字符串值,但它在编译时崩溃。如果我使用“p”打印值意味着它打印字符串而不是“p”的内存位置的地址
请帮忙解决
最佳答案
printf
需要一个指向 %s
格式说明符的指针。如果您传入 *p
,则将取消引用 p
并实际传入字符串的第一个字节(例如“P”)。然后 printf 将字符串的第一个“P”视为指针,并将其引导到无效的内存位置。
作为一般规则,在 C 中通常不会按值传递字符串。相反,您将指针传递给字符串。
关于c - 字符串中 "*p"和 "p"的格式说明符 %s 和 %c 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39422179/