Supposons que vous ayez une chaîne qui n'est PAS null
terminée et que vous connaissez sa taille exacte, alors comment pouvez-vous imprimer cette chaîne avec printf
en C? Je me souviens d'une telle méthode mais je ne peux pas la découvrir maintenant ...
107
C
contexte, toutes les chaînes sont terminées par null. Les tableaux de char sans null ne sont pas des chaînes ... ce sont des tableaux de char :)Réponses:
Il y a une possibilité avec printf, ça va comme ça:
Pas besoin de copier quoi que ce soit, pas besoin de modifier la chaîne ou le tampon d'origine.
la source
printf
même après une ~ décennie ... :)printf
il imprimera jusqu'à 11 caractères ou jusqu'à ce qu'il rencontre NULL, selon la première éventualité; dans votre exemple, NULL vient en premier. Spécifier une longueur maximale ne fait pas perdre à NULL sa signification de «fin de chaîne» pourprintf
.Voici une explication de la façon dont
%.*s
fonctionne et où il est spécifié.La deuxième forme est pour obtenir la précision de la liste d'arguments:
- Syntaxe de conversion de sortie dans le manuel de la glibc
Pour
%s
le formatage de chaîne, la précision a une signification particulière:- Autres conversions de sortie dans le manuel de la glibc
Autres variantes utiles:
"%*.*s", maxlen, maxlen, val
justifie à droite, en insérant des espaces avant;"%-*.*s", maxlen, maxlen, val
justifiera à gauche.la source
"%-*.*s", padding, str_view.size(), str_view.data()
Vous pouvez utiliser un fwrite () pour stdout!
De cette façon, vous sortirez les premiers caractères (nombre défini dans la variable number_of_chars) dans un fichier, dans ce cas vers stdout (la sortie standard, votre écran)!
la source
printf("%.*s", length, string)
ne fonctionnera pas.Cela signifie imprimer jusqu'à TO octets de longueur OU un octet nul, selon la première éventualité. Si votre tableau de caractères non terminé par un caractère nul contient des octets nuls AVANT la longueur, printf s'arrêtera sur ceux-ci et ne continuera pas.
la source
La longueur de la chaîne sera de 5.
la source
J'ai édité le code, voici une autre façon:
la source