我正在打印unsigned char类型的变量(8位长)。
但是printf()
在我正在打印的变量范围之外输出了一个巨大的数字。
unsigned char c;
printf("%u",c);
输出结果为:
21664
我不知道发生了什么事?
答案 0 :(得分:3)
它有未定义的行为,因为a
未初始化。
要打印字符的十进制值,您可以这样做 -
#include <stdio.h>
int main()
{
unsigned char a='A';
printf("%d",a);
return 0;
}
这将打印ascii
A
65
的{{1}}值。
答案 1 :(得分:2)
修改为printf( "%u", (unsigned int)c )
。否则printf
将从堆栈中获取2个字节 - 一个具有c
值,另一个具有随机字节。
答案 2 :(得分:2)
因为打印格式是%u是unsigned int,但c是unsigned char。 printf将c指向无符号的int点,程序读取未定义的缓冲区。
答案 3 :(得分:1)
使用错误的格式说明符会导致未定义的行为。
%u
适用于unsigned int
,不适用于unsigned char
答案 4 :(得分:1)
输出结果是:21664我不知道发生了什么事?
要打印该char的值,您必须为该char赋值,否则会得到未定义的行为。 如果你需要打印它的十进制值,只需使用%d(%u也可以在这里),因为CHAR也是一个INT
printf("The decimal value of CHAR is\t%d",c);
这也可以帮助您理解它:
#include <stdio.h>
int main(void){
unsigned char c = 'A';
printf("The decimal value of CHAR is\t%d\n",c);
printf("The decimal value of CHAR is\t%u\n",c);
return 0;
}
输出:
The decimal value of CHAR is 65 The decimal value of CHAR is 65
答案 5 :(得分:1)
您的代码中没有任何错误。就打印结果的长度而言,它是打印unsigned int的值而不是unsigned char。因为格式说明符错误。该值应小于65535,它是。 顺便打印一个unsigned char使用格式说明符%h。 这将告诉编译器该变量的类型为unsigned short,并将为您完成工作。
答案 6 :(得分:0)
只需将您的unsigned char声明为
unsigned char ch=234;
并且您的printf将正常工作