2010-05-29 5 views
2

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?

+0

% c sera seulement imprimer un caractère. Je dirais que vous avez déjà limité votre production. – abelenky

Répondre

9

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.

+0

Merci mec. Y a-t-il un moyen de se débarrasser de tous les espaces? – Tech163

+0

Nvm. Je l'ai changé en printf ("%. S", hexencode (c)); Merci de votre aide. – Tech163

+0

Vous pouvez également spécifier la longueur maximale à l'exécution avec le spécificateur *: 'printf ("%. * S ", max_len, str);' –

0

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

+0

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). –

+0

Vous avez raison - j'ai raté le. –