En C, je voudrais limiter la chaîne aux 8 premiers caractères. Par exemple, j'ai:Limite de sortie en C
char out = printf("%c", str);
Comment puis-je faire en sorte qu'il ne retourne que les 8 premiers caractères?
En C, je voudrais limiter la chaîne aux 8 premiers caractères. Par exemple, j'ai:Limite de sortie en C
char out = printf("%c", str);
Comment puis-je faire en sorte qu'il ne retourne que les 8 premiers caractères?
Vous pouvez limiter la longueur en réglant la précision dans le spécificateur de format:
printf("%.8s", str);
Ce imprimera jusqu'à huit caractères de la chaîne terminée par zéro pointé par str
. Si la longueur de str
est inférieure à huit caractères, la chaîne entière sera imprimée.
Notez que le spécificateur de format pour une chaîne terminée par NULL est %s
, pas %c
(%c
est d'imprimer un seul char
), et que printf
retourne un int
(le nombre total de caractères imprimés), pas un char
.
Merci mec. Y a-t-il un moyen de se débarrasser de tous les espaces? – Tech163
Nvm. Je l'ai changé en printf ("%. S", hexencode (c)); Merci de votre aide. – Tech163
Vous pouvez également spécifier la longueur maximale à l'exécution avec le spécificateur *: 'printf ("%. * S ", max_len, str);' –
Non
Ceci est incorrect. Impression tabulaire "% 8s" jusqu'à 8 espaces, comme dans l'exemple donné. Cela ne tronque pas. ISOC99. Si c'est une chose de Windows seulement, d'accord, MS ignore le monde sur beaucoup de choses. Si la longueur de la chaîne est plus longue que la tabulation, la chaîne complète est imprimée. Voir:
int main()
{
char tmp[]="123456789";
printf("1 %1s\n", tmp);
printf("2 %2s\n", tmp);
printf("4 %4s\n", tmp);
printf("8 %8s\n", tmp);
printf("16 %16s\n", tmp);
printf("32 %32s\n", tmp);
return 0;
}
sortie de gcc 3.4.2 sur Solaris 5.9:
> ./a.out
1 123456789
2 123456789
4 123456789
8 123456789
16 123456789
32 123456789
sprintf() va dupliquer et tronquer une chaîne alors il peut être envoyé à printf. Ou si vous ne se soucient pas de la chaîne source:
char * trunc(char *src, int len)
{
src[len]=0x0;
return src;
}
Références: STANDARD INTERNATIONAL © ISO/CEI ISO/CEI 9899: TC2, Comité GT14/N1124 Projet - 6 mai 2005
En supposant que vous vouliez dire cela en réponse à ma réponse, je crois que vous avez manqué le '. 'dans le spécificateur de format:'% 8s' définit la largeur * minimum * à huit caractères; '% .8s' définit la largeur * maximum * à huit caractères (il s'agit respectivement des modificateurs _width_ et _precision_ du spécificateur de format). Il n'y a rien de spécifique à la plate-forme pour ce comportement - cela fait partie de la spécification du langage C (et C++, puisqu'il inclut la bibliothèque standard C). –
Vous avez raison - j'ai raté le. –
% c sera seulement imprimer un caractère. Je dirais que vous avez déjà limité votre production. – abelenky