Sprintf 无法正常工作
Sprintf Does not work properly
您好,我正在使用 xc8 处理 Pic18f46k22 compiler.sprintf 功能无法正常工作。
我的代码是:
const char *DATA[4] = {"xxxxxx","yyyyyy","zzzzzz","aaaa"}
unsigned char Data1=2;
unsigned char Data2=3;
char L1Buffer[6];
char L2Buffer[6];
char TotalBuffer[20];
for(int i=0;i<6;i++){L1Buffer[i]=0;L2Buffer[i]=0;}
for(int i=0;i<20;i++){TotalBuffer[i]=0;}
sprintf (L1Buffer,"%s", DATA[Data1]);
sprintf (L2Buffer,"%s%d", DATA[Data2],Data2);
sprintf(TotalBuffer,"L1:%s L2:%s",L1Buffer,L2Buffer);
Lcd_Set_Cursor(2,1);
printf("%s",TotalBuffer);
Lcd_Set_Cursor(3,1);
printf("%s",L2Buffer);
输出:
L1:zzzzzzaaaa3 L2:aa
aaaa3
预期输出:
L1:zzzzzz L2:aaaa3
aaaa3
您正在将 7 个字符(六个 'z'
s + 一个 '[=14=]'
)放入六字符数组中。您需要考虑 space 作为空终止符。
您需要声明 L1Buffer
以容纳 7 个字符:
unsigned char L1Buffer[7];
在您的例子中,L1Buffer
和 L2Buffer
在内存中相邻放置。将 "zzzzzz" 写入 L1Buffer
会将六个 'z'
写入 L1Buffer
并将 '[=14=]'
写入 L2Buffer[0]
,因为它恰好位于它旁边:
z z z z z z[=11=] . . . . .
`-L1Buffer-'`-L2Buffer-'
然后,L2Buffer
被覆盖:
z z z z z z a a a a 3[=12=]
`-L1Buffer-'`-L2Buffer-'
请注意,在 'z'
之后没有终止符,因此 sprintf(TotalBuffer,"L1:%s L2:%s",L1Buffer,L2Buffer);
取 L1Buffer
值,直到它在 L2Buffer
末尾遇到 null 终止符。这就是为什么你得到 zzzzzzaaaa3
.
您好,我正在使用 xc8 处理 Pic18f46k22 compiler.sprintf 功能无法正常工作。 我的代码是:
const char *DATA[4] = {"xxxxxx","yyyyyy","zzzzzz","aaaa"}
unsigned char Data1=2;
unsigned char Data2=3;
char L1Buffer[6];
char L2Buffer[6];
char TotalBuffer[20];
for(int i=0;i<6;i++){L1Buffer[i]=0;L2Buffer[i]=0;}
for(int i=0;i<20;i++){TotalBuffer[i]=0;}
sprintf (L1Buffer,"%s", DATA[Data1]);
sprintf (L2Buffer,"%s%d", DATA[Data2],Data2);
sprintf(TotalBuffer,"L1:%s L2:%s",L1Buffer,L2Buffer);
Lcd_Set_Cursor(2,1);
printf("%s",TotalBuffer);
Lcd_Set_Cursor(3,1);
printf("%s",L2Buffer);
输出:
L1:zzzzzzaaaa3 L2:aa
aaaa3
预期输出:
L1:zzzzzz L2:aaaa3
aaaa3
您正在将 7 个字符(六个 'z'
s + 一个 '[=14=]'
)放入六字符数组中。您需要考虑 space 作为空终止符。
您需要声明 L1Buffer
以容纳 7 个字符:
unsigned char L1Buffer[7];
在您的例子中,L1Buffer
和 L2Buffer
在内存中相邻放置。将 "zzzzzz" 写入 L1Buffer
会将六个 'z'
写入 L1Buffer
并将 '[=14=]'
写入 L2Buffer[0]
,因为它恰好位于它旁边:
z z z z z z[=11=] . . . . .
`-L1Buffer-'`-L2Buffer-'
然后,L2Buffer
被覆盖:
z z z z z z a a a a 3[=12=]
`-L1Buffer-'`-L2Buffer-'
请注意,在 'z'
之后没有终止符,因此 sprintf(TotalBuffer,"L1:%s L2:%s",L1Buffer,L2Buffer);
取 L1Buffer
值,直到它在 L2Buffer
末尾遇到 null 终止符。这就是为什么你得到 zzzzzzaaaa3
.