153 votes

Y a-t-il un moyen de spécifier le nombre de caractères d'une chaîne à imprimer en utilisant printf() ?

Existe-t-il un moyen de spécifier le nombre de caractères d'une chaîne à imprimer (similaire aux décimales en ints) ?

printf ("Here are the first 8 chars: %s\n", "A string that is more than 8 chars");

Souhaite l'imprimer : Here are the first 8 chars: A string

22voto

hlovdal Points 11039

En plus de spécifier un nombre fixe de caractères, vous pouvez également utiliser *, ce qui signifie que printf prend le nombre de caractères d'un argument :

#include <stdio.h>

int main(int argc, char *argv[])
{
    const char hello[] = "Hello world";
    printf("message: '%.3s'\n", hello);
    printf("message: '%.*s'\n", 3, hello);
    printf("message: '%.*s'\n", 5, hello);
    return 0;
}

Impressions :

message: 'Hel'
message: 'Hel'
message: 'Hello'

13voto

printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");

%8s spécifierait une largeur minimale de 8 caractères. Vous voulez tronquer à 8, donc utilisez %.8s.

Si vous voulez toujours imprimer exactement 8 caractères, vous pouvez utiliser %8.8s

11voto

Peter Alexander Points 31990

En utilisant printf, vous pouvez faire

printf("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");

Si vous utilisez C++, vous pouvez obtenir le même résultat en utilisant le STL :

using namespace std; // for clarity
string s("A string that is more than 8 chars");
cout << "Here are the first 8 chars: ";
copy(s.begin(), s.begin() + 8, ostream_iterator<char>(cout));
cout << endl;

Ou, moins efficacement :

cout << "Here are the first 8 chars: " <<
        string(s.begin(), s.begin() + 8) << endl;

4voto

Chris H Points 3534

En C++, c'est facile.

std::copy(someStr.c_str(), someStr.c_str()+n, std::ostream_iterator<char>(std::cout, ""));

ÉDITER : Il est également plus sûr de l'utiliser avec des itérateurs de chaînes, afin de ne pas courir à la fin. Je ne suis pas sûr de ce qui se passe avec printf et string qui sont trop courts, mais je pense que c'est plus sûr.

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