Est-il possible d'imprimer une certaine section d'un C-string, sans faire de séparer les sous-chaîne?
Dire que j'ai les suivantes:
char* string = "Hello, how are you?";
Est-il possible de n'afficher que les 5 derniers octets de cette chaîne? Que sur les 5 premiers octets seulement? Est-il une variation de printf
qui permettrait cela?
Vous devez vous connecter pour publier un commentaire.
Oui, il suffit de passer un pointeur vers la cinquième-pour-le-dernier caractère. Vous pouvez le déterminer en
string + strlen(string) - 5
.Utilisation d'un spécificateur de précision:
%.5s
printf
va encore s'arrêter au premier caractère nul.Oui, les cinq derniers octets de la chaîne peut être fait avec:
Les cinq premières peut être fait avec:
Vous pouvez combiner les deux pour obtenir des sous-chaînes dans la chaîne ainsi. Le mot
how
peut être imprimé avec:Vous ne devez être attentif à ce que la chaîne est assez longue pour que cela fonctionne. L'impression des cinq derniers caractères d'une chaîne de caractères va provoquer un comportement indéterminé depuis que l'indice termine à
-4
. En d'autres termes, vérifiez la longueur de la corde avant de tenter cela.int x = 3; printf ("%.*s, x, "abcde")
. Quant à la deux chiffres, ce n'est pas vraiment nécessaire dans ce cas puisque vous savez que vous avez assez de personnages, mais j'ai toujours le faire à partir de la force de l'habitude. Pour les chaînes, c'est effectivement le minimum et le maximum des longueurs. Je vais le prendre depuis qu'il est inutile ici.%.*s
spécificateur de format, pas la%*s
spécificateur de format.printf
va encore s'arrêter au premier caractère nul.Deux solutions:
Dire donné un être prévisible chaîne de même longueur - je vais l'utiliser de jour comme exemple et a demandé à se diviser en HH:MM:SS.DDDDDDD
[1] Lisibles À La Mise En Œuvre:
[2] En Court De Mise En Œuvre:
Soit:
ou:
Devrait fonctionner.
Au lieu de printf vous pouvez utiliser sprintf et copie d'une mémoire tampon. Je voudrais également vérifier la longueur correcte pour éviter un comportement imprévisible.
Dans les deux cas, la sortie sera: