Ich habe ein Programm, das 2x24bit Integer konvertiert sie zu strings
über sprintf
und setzen Sie sie zu einer Zeichenfolge, die eine 58-Bit-Nummer darstellt. Programm:printf/sprintf Wahnsinn (spontane Verkettung)
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);
Sie denken vielleicht die Ausgabe auf res_all
res_h+res_l
ist, die 6 + 6 = 12 Zeichen so: 1FFFFF2FFFFF
aber die Ausgabe ist: 1FFFFF2FFFFF2FFFFF
wenn ich verkürzen res_all
-res_all[6]
es ist alles in Ordnung.
Aber wie kann eine 6-stellige Zeichenfolge auf 18 Zeichen gedruckt werden?
Ein Nullchar-Terminator in 'res_all' kann Ihre Erfolgschancen * erheblich * verbessern. Das und die richtige Größe Ihrer Puffer. – WhozCraig
Was @WhozCraig sagte. Alternativ können Sie einen Zeichenkettenpuffer, der nicht null-terminiert ist, durch explizite Angabe einer Genauigkeit ausgeben: 'printf ("%. 12s ", res_all);' (Wenn die Zeichenkette auf Null gesetzt wird, kann sie mit vielen Standardfunktionen verwendet werden) Das ist der bessere Ansatz.) –