我有以下用于 AT89S52 微控制器的 C 代码片段:
unsigned char x = 0x10;
unsigned char str[21];
sprintf(str, "%u", (x >> 4) );
stdio.h 中的 sprintf 函数原型:
extern int sprintf (char *, const char *, ...);
有人能告诉我为什么我的字符串包含“256”而不是“1”吗?,x 变量甚至不足以容纳 256 值。
我正在使用标准 stdio.h 库使用 KEIL uVision 5 进行编译。
如果我使用:
void UlToStr(char *s, unsigned long bin, unsigned char n)
{
s += n;
*s = '\0';
while (n--)
{
*--s = (bin % 10) + '0';
bin /= 10;
}
}
而不是 sprintf 字符串包含一个“1”。
我通过 char-LCD 40x4(KS 0066 兼容控制器)验证字符串打印的内容
str_lecd1(str);
具有以下功能:
void str_lcd1(unsigned char *a)
{
int i;
for(i=0;a[i]!='\0';i++)
data_lcd1(a[i]);
delay(10);
}
void data_lcd1(unsigned char x)
{
P1 = x;
rs = 1;
en1 = 1;
delay(4);
en1=0;
delay(4);
}