对于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);
}