【问题标题】:printf integer displays more than C++ coutprintf 整数显示多于 C++ cout
【发布时间】:2017-10-31 09:25:36
【问题描述】:

我是一名学习 C++ 的 C 程序员

似乎 cout 有点笨拙,我不明白为什么它会产生不同的输出。

//The printf below displays value 50
//The cout below display value 2

data_to_send.data[2] = atoi(data_str.c_str());    
printf("\n DEBUG: %d\n",data_to_send.data[2]);
std::cout << "Debug: " << std::dec << data_to_send.data[2];

【问题讨论】:

  • 什么是data_to_send.data[2]?
  • 信息不足。
  • 无法在 ideone 上复制。
  • 信息不足。在不知道data_to_send.data 或data_str 的类型或值的情况下,没有人能猜出代码的输出应该是什么。至少,提供minimal reproducible example 以及类型和值的说明。
  • 将%d 更改为%c 或将data_to_send.data[2] 更改为(int)data_to_send.data[2]。

标签: c++ printf cout


【解决方案1】:

您的data_to_send.data[2] 字段是char 或unsigned char type(字节)。

printf 将其视为整数 50,这是格式说明符 %d 所要求的。

cout 将其视为字符 '2',ASCII 码 50,正如数据类型所隐含的要求。

【讨论】:

    【解决方案2】:

    我的猜测是data_to_send.data 是char*,所以data_to_send.data[2] 是具有值50 的字符。当您调用 printf 时,您指定将参数视为整数 (%d),因此它会打印 50。在 C++ 中,cout 使用函数重载将具体函数调用到具体类型的参数,在这种情况下,operator&lt;&lt; 代表 char。 '2'的ASCII值是50,所以2被打印出来了。

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 2020-08-12
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多