Der grundlegende Weg ist:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
Der andere, oft nützlichere Weg ist:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
Hier geben Sie die Länge als int-Argument für printf () an, das das '*' im Format als Anforderung zum Abrufen der Länge aus einem Argument behandelt.
Sie können auch die Notation verwenden:
printf ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
Dies ist auch analog zur Notation "% 8.8s", ermöglicht es Ihnen jedoch erneut, die minimale und maximale Länge zur Laufzeit anzugeben - realistischer in einem Szenario wie:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
Die POSIX-Spezifikation für printf()
definiert diese Mechanismen.
-
), um die angegebene Länge zu erreichen.% 8s würde eine Mindestbreite von 8 Zeichen angeben. Sie möchten bei 8 abschneiden, verwenden Sie also% .8s.
Wenn Sie immer genau 8 Zeichen drucken möchten, können Sie% 8.8s verwenden
quelle
Sie können nicht nur eine feste Anzahl von Zeichen angeben
*
, sondern auch verwenden, was bedeutet, dass printf die Anzahl der Zeichen aus einem Argument übernimmt:Drucke:
quelle
Mit können
printf
Sie tunWenn Sie C ++ verwenden, können Sie mit der STL dasselbe Ergebnis erzielen:
Oder weniger effizient:
quelle
ostream_iterator<char>(cout)
! Verwendenostreambuf_iterator<char>(cout)
Sie stattdessen ! Der Leistungsunterschied sollte ziemlich groß sein.std::cout.write(s.data(), 8)
. Oder in modernem C ++ ,std::cout << std::string_view{s.data(), 8}
.Drucken Sie die ersten vier Zeichen:
printf("%.4s\n", "A string that is more than 8 chars");
Weitere Informationen finden Sie unter diesem Link ( siehe .Precision-Abschnitt).
quelle
In C ++ ist es einfach.
BEARBEITEN: Es ist auch sicherer, dies mit String-Iteratoren zu verwenden, damit Sie nicht am Ende davonlaufen. Ich bin mir nicht sicher, was mit zu kurzen printf und string passiert, aber ich denke, das ist sicherer.
quelle
std::cout << someStr.substr(0,8);
ist viel offensichtlicher.printf (..... "%. 8s")
quelle
In C ++ mache ich das folgendermaßen:
Bitte beachten Sie, dass dies nicht sicher ist, da ich beim Übergeben des zweiten Arguments über die Größe der Zeichenfolge hinausgehen und eine Speicherzugriffsverletzung generieren kann. Sie müssen Ihre eigene Prüfung durchführen, um dies zu vermeiden.
quelle