Est-il une autre façon de tronquer une chaîne de caractères?
char out_file_name[30];
ogSize = strlen(FileName); //i.e. - FileName_anylength.log (always.log)
ogSize -= strlen(IN_FILE_SUFFIX); //amount of chars before .log
strncpy( out_file_name, FileName, ogSize ); //out_file_name now is FileName_anylength (without the .log)
Est-ce la meilleure façon de le faire?
Aussi, comment puis-je garde que ogSize n'arrive pas à faire plus de 30 caractères, comme il arrive à partir de la saisie de l'utilisateur?
Merci.
Tu veux dire ajouter? Ou une chaîne d'extraction? Tronquer?
Je pense que tu veux dire "tronquer" (vous voulez supprimer des éléments à partir de la fin de la chaîne, tronquant à une longueur plus courte, droite?)
tronquer la. Merci. Désolé, l'anglais est ma première langue....oui d'abord, c'est pourquoi il est si mauvais.
Le code (peut-être juste un exemple) est en supposant que l'entrée de l'utilisateur contient le fichier de suffixe. Il ne peut pas. Envisagez donc de vérifier que la partie tronquée est en fait le suffixe. Edit: Ah, maintenant, je vois le commentaire dans le code. 🙂
Si vous connaissez le linéaire de la mémoire d'adresse, et vous êtes très chanceux, vous pourriez atteindre en et retirez le module DIMM. Qui va tronquer yer chaîne assez bon 🙂
Je pense que tu veux dire "tronquer" (vous voulez supprimer des éléments à partir de la fin de la chaîne, tronquant à une longueur plus courte, droite?)
tronquer la. Merci. Désolé, l'anglais est ma première langue....oui d'abord, c'est pourquoi il est si mauvais.
Le code (peut-être juste un exemple) est en supposant que l'entrée de l'utilisateur contient le fichier de suffixe. Il ne peut pas. Envisagez donc de vérifier que la partie tronquée est en fait le suffixe. Edit: Ah, maintenant, je vois le commentaire dans le code. 🙂
Si vous connaissez le linéaire de la mémoire d'adresse, et vous êtes très chanceux, vous pourriez atteindre en et retirez le module DIMM. Qui va tronquer yer chaîne assez bon 🙂
OriginalL'auteur T.T.T. | 2010-08-31
Vous devez vous connecter pour publier un commentaire.
Avec un C-chaîne de style, il vous suffit de définir le caractère que vous souhaitez tronquer sur
\0
.Concernant votre deuxième question, fondamentalement vous de vérifier. Ou vous allouer plus de mémoire que vous avez besoin, en fonction de la taille de la chaîne (n'oubliez pas d'inclure chambre pour que
\0
).\0
Solution sympa, merci.
OriginalL'auteur jkerian
Donner à ce look:
Il est suffisamment bien connue et de qualité pour être utilisé en toute sécurité dans la plupart des environnements: IEEE 1003.1, 2004, (opengroup.org/onlinepubs/009695399/functions/strdup.html); SVr4, 4.3 BSD, POSIX.1-2001 (linux.die.net/man/3/strdup), et Unix 98 (mkssoftware.com/docs/man3/strdup.3.asp). Aussi, ma solution ne fait aucune hypothèse sur la longueur de la chaîne source et il le préserve.
OriginalL'auteur BillP3rd
De prendre votre dernière question, en veillant à une taille maximale est assez facile. En général, vous souhaitez utiliser
fgets
pour lire la chaîne de caractères. Cela vous permet de spécifier une longueur maximale. Sinon, vous pouvez spécifier une taille maximale dans un format de scanf (par exemple,"%29s"
ou"%29[^\n]"
). Notez la différence entre les deux: avecfgets
vous spécifiez la taille de la mémoire tampon, mais avecscanf
vous spécifiez un de moins que la taille de la mémoire tampon (c'est à dire, le nombre maximum de caractères à lire).Comme pour la première question: oui, il y a généralement de meilleurs moyens.
strncpy
est un étrange fonction, écrit à l'origine pour une assez fins spécifiques, et (pour être honnête) devrait probablement être supprimé de la bibliothèque standard, car il semble comme il devrait être utile, n'est pratiquement jamais vraiment.Je serais probablement faire les choses un peu différemment. Une possibilité serait d'utiliser
snprintf
, quelque chose comme:OriginalL'auteur Jerry Coffin
utiliser fgets() pour lire le texte de l'utilisateur, de cette façon, vous pouvez spécifier une longueur maximum de la chaîne
OriginalL'auteur Anders
Vous pouvez insérer la valeur null dans la chaîne de l'abréger. Ci-dessous la fonction strstr() est utilisée pour trouver l'adresse de la première occurrence de ".journal". Après cela, vous pouvez soustraire les deux adresses les uns des autres pour savoir la longueur du nom et de l'emplacement où vous souhaitez insérer la valeur null.
OriginalL'auteur skimobear
ou
OriginalL'auteur user411313