【问题标题】:printf giving me incorrect output in Cprintf 在 C 中给了我不正确的输出
【发布时间】:2012-11-06 02:41:34
【问题描述】:

这可能是一个非常基本的问题,但我无法在任何地方找到答案,这是我在用 C 语言编程数周后第一次遇到这个问题。本质上,如果我编写一些看起来像这样的代码这个:

int size;
scanf("%d", &size);
printf("size is %d", &size);

如果我输入,比如 size = 2,程序将打印出 133692 或类似数字的内容。为什么是这样?我在这里做错了什么?

【问题讨论】:

  • 你知道&操作员首先做什么吗?
  • ...而且没有一个答案被接受!
  • @user9000 他是新用户,这是他的第一个问题,所以......这需要时间

标签: c printf scanf


【解决方案1】:

你必须这样做:

printf("size is %d", size);

相反。这将打印 int 对象 size 的值。

但是

 printf("size is %d", &size);

是未定义的行为。

【讨论】:

  • 未定义是什么意思?很明显,后者打印了大小的地址。 (编译器给出警告)
  • @AkiSuihkonen d 转换说明符需要 int 参数,将类型指针参数传递给 int 会调用未定义的行为。
  • 如果你想打印 &size 的指针值,你应该使用 %p 而不是 %d。
【解决方案2】:

您正在打印size 的地址,即&size

只需传递一个普通的size

【讨论】:

    【解决方案3】:

    删除printf 语句中的&&size --> 打印地址。

          printf("size is %d", size);
    

    【讨论】:

      【解决方案4】:

      printf 和 scanf 的调用约定不同。

      Printf 的参数通常是按值(没有 &),但 scanf 必须有指针。 (&)
      (您不能将新值设置为例如 1.0,但您可以打印它...)

      【讨论】:

        【解决方案5】:

        试试

        printf("size is %d", size);
        

        & 为您提供变量的内存位置(地址)。

        printf("size is %d", &size);
        

        所以,上面将打印size的内存位置(地址),而不是size中存储的值。

        【讨论】:

          猜你喜欢
          • 2022-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 2021-06-15
          • 2017-01-09
          • 2014-05-29
          • 1970-01-01
          相关资源
          最近更新 更多