c - 字符串中 "*p"和 "p"的格式说明符 %s 和 %c 之间的差异

标签 c pointers

为什么这个程序会这样?

#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/

相关文章:

c++ - 什么是字符*?

c# - 指向 Byte[] 数组的不安全 Int32 指针

C#:如何将嵌套结构从 C 转换为 C#?

c - 将指针向下传递给三个嵌套函数

C 数组和指针

具有未定义输入的 C 中的凯撒加密

C 变量定义

C: 关闭文件* - 不是文件描述符

c - 函数内部打印不同的指针地址

c++ - 将指向未知实例(但已知类)的已知成员的指针转换为拥有实例