奇思妙想 · 2024年 4月 24日 0

%l %h和%d %o %u %x

63 次浏览

C语言%d对应整形,%hd和%ld对应短整形和长整形,%lld代表long long int,%o代表八进制输出,%u是%d的无符号版本,格式串解析是在libc完成。

  • 不能有独立的%h或%l格式串,会和上面的组合格式产生冲突。
    • VS2019编译C代码只有%h格式符: 编译警告: 格式字符串“%h”未终止
  • %d/%o/%u/%x和%h或%l可以组合,比如%ho, %hu, %lo, %lx, %ld等。
  • 不能用大写模式,比如%L或者%LL, libc不识别

%h数值可能不是预期

在C语言中,假设short是2字节,%hd只会获取2个字节数据。如下第二句输出结果会变成-32768.

  • printf("%hd\n", 200);
  • printf("%hd\n", 32768);

无符号版本

  • 注意,%o和%x输出格式是无符号版本。