У меня есть программа, которая принимает 2x24bit integer, преобразует их в strings
через sprintf
и складывает их в строку, представляющую 58-битное число. Программа:printf/sprintf madness (spontanous concatenation)
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 символов?
Терминатор nullchar в 'res_all' может улучшить ваши шансы на успех * значительно *. Это и правильная калибровка ваших буферов. – WhozCraig
Что сказал @WhozCraig. В качестве альтернативы вы можете напечатать буфер символов, который не завершен нулем, явно указывая точность: 'printf («% .12s », res_all);' (При завершении нулевой строки он будет использоваться со многими стандартными функциями , так что это лучший подход.) –