c - 将负数打印为 C 中明确定义的字符吗?

标签 c char printf

例如下面的代码:

#include <stdio.h>
#include <limits.h>

int main(void)
{
    char a;
    signed char b;
    for(a = CHAR_MIN, b = CHAR_MIN; a < CHAR_MAX ; a++, b++ )
    printf("%c %c\n", a, b);
}

输出:

! !
" "
# #
$ $
% %
& &
' '
( (
……

ab为负数时,字符仍然打印在屏幕上。我想知道这种行为是否定义明确?

如果是这样,它是由标准还是特定实现定义的?定义此类行为的意义何在?

最佳答案

当传递一个值来匹配 "%c" 时,它是否被转换为 intunsigned 作为通常整数提升的一部分由于 printf() 参数的 ...

printf() 看到 int 值时,它会转换为 unsigned char。然后打印相应的字符。

c If no l length modifier is present, the int argument is converted to an unsigned char, and the resulting character is written. C11dr §7.21.6.1 8

因此,传递任何提升为 int 或什至 INT_MAX 范围内的 unsigned 的窄类型整数都不是问题。

关于c - 将负数打印为 C 中明确定义的字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166698/

相关文章:

将人类时间转换为纪元 Unix 时间返回负数

c - 为什么我的程序接受的整数太多而输入的整数太少?

.net - 将 FFMpeg 编译为 .net 可执行文件

c - 多个格式说明符的 printf 对齐

linux - 有没有办法在不清除屏幕的情况下替换行?

c - 嵌套在循环中的公式将无法正确执行

c++ - 初始化字符矩阵时出现 EAccess 冲突

java - 获取字符代码点的正确方法是什么?

c++ - 比较堆栈

在 C 中使用 snprintf 将所有 argv 值连接到一个字符串