printf的长度修饰符标志有什么意义?

时间:2017-12-05 11:32:41

标签: c++ printf

printf有一系列“长度修饰符”标记,您可以在格式规范中传递,例如%d用于int参数,但%hhd用于signed char(8位)和%lldlong long(64位)。

我可以看到为什么这对于大于int类型是必要的,但是较小的类型无论如何都是implicitly promoted to int

%hhd的情况下%d会给signed char提供不同的输出,假设您确实传递了y2 <- c(0,0,NA,0,0,0,0) y <- c(0,0,0,NA,NA,0) x <- c(0,0,0,0) li <-list(y2,y,x)

2 个答案:

答案 0 :(得分:5)

促销活动将保留签名。编译器知道变量的类型,但<html> <body> <div class="fullviewport"></div> <div class="extracontent"></div> </body> </html>不知道。如果您尝试使用无符号会话说明符打印带符号的变量,它将以不同方式处理该变量(即,打印出符号扩展的F&#39; s)。长度修饰符printf表示您明确要使用无符号格式打印带签名的char。实例:

hh

输出:

#include <stdio.h>
int main(void) {
  char* s = "\u00d1"; /* Ñ */
  for (char* p = s; *p; ++p) printf("%02X (%02hhX)\n", *p, *p);
  return 0;
}

答案 1 :(得分:1)

您需要长度修饰符才能使用scanf读取较短的数据。由于printfscanf共享大致相同的格式字符串集,包括修饰符,因此主要保留了一致性问题。