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/C++ for windows 开发时省略 msvcr100.dll?

c++ - 指针算术递增后缀/前缀

c++ - 试图制作一个排序的动态列表(数据结构)

c++ - 关于 C++ 中的指针和引用的困惑

c - 如何引用另一个 C 文件中的变量?

c - fork() 父子进程的输出

c - Valgrind 如何能够访问已编译的 C 程序中内存分配的行号,我该怎么做?

c - 使用 double* 值进行快速排序

c++ - 仅在 Linux 操作系统上出现双指针后段错误

c++ - 如何访问 std::array 给定其在 C++ 中的指针的元素