Also habe ich eine Zeichenfolge, die eine bestimmte Anzahl von Bytes (oder Länge) hat. Ich sage Bytes, weil am Ende der Zeichenfolge kein NULL-Terminator steht. Allerdings weiß ich, wie lang die Saite ist. Normalerweise, wie wir alle wissen, wenn Sie printf("%s", str);
, wird es weiterhin jedes Byte drucken, bis es ein NULL-Zeichen erhält. Ich weiß, dass es keine C-Zeichenfolge gibt, die nicht NULL-terminiert ist, aber ich habe eine merkwürdige Situation, in der ich Sachen (nicht speziell Zeichenfolgen) speichere und nicht die NULL, sondern die Länge der "Sache" speichere. obwohlWie drucke ich die ersten n Bytes, wenn die Länge der Zeichenfolge größer als n ist?
printf("%.5s", str);
Aber mit dieser Situation, ich bin hart Codierung der 5, in: Hier
ist ein kleines Beispiel:
char* str = "Hello_World"; //Let's use our imagination and pretend this doesn't have a NULL terminator after the 'd' in World
long len = 5;
//Print the first 'len' bytes (or char's) of 'str'
Ich weiß, dass es erlaubt ist, so etwas zu tun Mit meiner Situation ist die 5 in einer Variablen. Ich würde so etwas tun:
printf("%.(%l)s", len, str);
Aber ich weiß, dass Sie das nicht tun können. Aber gibt dir eine Vorstellung davon, was ich zu erreichen versuche.
Eine sehr ähnliche Frage hier beantwortet wurde: http://stackoverflow.com/a/4777218/2163085 – Ninjammer
SO 4.777.218 verwandt ist, aber etwas anders (bezogen vor allem auf Zuordnung eher als Drucken). –
Sie können 'snprintf (format, sizeof (format)," %%.% Ds ", len);' verwenden, um die entsprechende Formatzeichenfolge zu erstellen, und dann 'format' im Aufruf von' printf() 'verwenden. Wenn Sie 'scanf()' tun, müssen Sie dies praktisch tun, wenn die Eingangslängen variieren (das '*' in 'scanf()' unterscheidet sich sehr von dem '*' in 'printf()'). OTOH, der 'printf ("%. * S \ n ", len, str)' Mechanismus ist normalerweise am besten geeignet für 'printf()'. –