我有一个采用2x24bit整数的程序通过strings
将它们转换为sprintf
并将它们放在一起代表一个58位数字的字符串。
程序:
int buffer_h = 0x001FFFFF;
int buffer_l = 0x002FFFFF;
int i,j = 0;
char res_h[10];
char res_l[10];
char res_all[12];
sprintf(res_h,"%06X",buffer_h);
sprintf(res_l,"%06X",buffer_l);
for(i=0;i<6;i++) {
res_all[i] = res_h[i];
}
for(i=0;i<6;i++) {
res_all[i+6] = res_l[i];
}
printf("%s",res_all);
您可能认为res_all
上的输出为res_h+res_l
,其中6 + 6 = 12个字符,因此:1FFFFF2FFFFF
但输出为:1FFFFF2FFFFF2FFFFF
如果我将res_all
缩短为res_all[6]
,那就可以了。
但是如何将6个字符的字符串打印到18个字符?
答案 0 :(得分:2)
您必须取消终止(res_all
)printf
。 res_all
仅在空终止字符串上确定性地工作。我猜你很幸运,res_l
恰好位于{{1}}之前的内存中,恰好是空终止。你可以在某处杂草中轻松离开。