printf / sprintf madness(spontanous concatenation)

时间:2016-04-03 19:01:34

标签: c printf concatenation

我有一个采用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个字符?

1 个答案:

答案 0 :(得分:2)

您必须取消终止(res_allprintfres_all仅在空终止字符串上确定性地工作。我猜你很幸运,res_l恰好位于{{1}}之前的内存中,恰好是空终止。你可以在某处杂草中轻松离开。