【问题标题】:Why is my printing of a char not working?为什么我的字符打印不起作用?
【发布时间】:2015-06-16 11:21:00
【问题描述】:

这让我大吃一惊。我真的不知道这是关于什么的。我有以下代码:

char cSexMF = 'M';

printf("%c \n", &cSexMF);

它应该输出 M 但是每次我运行代码时它都会输出不同的数字或字母或符号或任何它真正喜欢的东西。我认为这是一个简单的命令,但显然我什至不能再这样做了。

谁能提供一些关于为什么会发生这种情况的见解?

【问题讨论】:

  • 为什么&?你想要这个字符还是它的内存地址?

标签: c char printf


【解决方案1】:

当您在变量前添加一元 & 时,它会返回该变量的地址。因此,您正在尝试打印cSexMF 的地址,而不是它所持有的值。

使用printf()时,不需要添加&,只需

printf("%c \n", cSexMF);

就足够了(除非你真的想输出地址,但是你需要使用%p类型说明符)。

通常,当您使用 scanf() 时,您在变量前添加 &(因为您将值存储在该地址),但使用 printf() 时不需要这样做

【讨论】:

    【解决方案2】:

    因为你传递了错误的参数。

    "%c" 说明符需要 char,而您传递的变量的地址类型为 char *

    要使其正常工作,只需删除操作员的& 地址

    printf("%c\n", cSexMF);
    

    您可能会感到困惑,因为如果它是scanf(),则需要&,原因是scanf() 需要修改变量的内容,为此您传递它的地址并通过指针。 printf() 函数需要值,而不是地址。

    另外,启用编译器警告。作为一个学习c语言的程序员,它会为你省去很多问题,即使是经验丰富的程序员也会使用警告来防止愚蠢的拼写错误。

    【讨论】:

    • 天哪,我才意识到我是个白痴。谢谢。
    【解决方案3】:

    您正在传递一个指针。不要这样做。

    char cSexMF = 'M';
    printf("%c \n", cSexMF);
    

    当您在变量名前添加& 时,会导致地址提取。在这里,您尝试将 指向 char 的指针传递给需要 char 的调用。

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多