60 votes

Comment imprimer une chaîne à terminaison non nulle à l'aide de printf?

Comment puis-je imprimer une chaîne non terminée par null à l'aide de printf, en supposant que je connaisse la longueur de la chaîne au moment de l'exécution?

103voto

KennyTM Points 232647
printf("%.*s", length, string);

19voto

Sadeq Dousti Points 349

La réponse fournie par @KennyTM est grande, mais avec une subtilité.

En général, si la chaîne est non null, "terminé", mais a un caractère nul dans le milieu, printf("%.*s", length, string); ne fonctionne pas comme prévu. C'est parce que l' %.*s chaîne de format demande printf imprimer un maximum de length caractères, pas exactement length caractères.

Je préfère utiliser la solution générale l'a souligné @William Pursell dans un commentaire sous l'OP:

fwrite(string, sizeof(char), length, stdout);

Voici un exemple de code:

#include <stdio.h>

int main(void) {
    size_t length = 5;

    char string[length];
    string[0] = 'A';
    string[1] = 'B';
    string[2] = 0;        // null character in the middle
    string[3] = 'C';
    string[4] = 'D';

    printf("With printf: %.*s\n", length, string);
    printf("With fwrite: ");
    fwrite(string, sizeof(char), length, stdout);
    printf("\n");

    return 0;
}

Sortie:

With printf: AB
With fwrite: AB CD

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X