Comment supprimer le premier caractère de C-string?
Quelqu'un peut-il m'aider? J'ai besoin de supprimer le premier caractère d'un char *
dans C.
Par exemple, char * contents
contient un '\n'
comme premier caractère dans le tableau. J'ai besoin de détecter et d'éliminer ce personnage, à la modification de la variable d'origine après son été "épurés".
Quelqu'un peut m'aider avec le code? Je suis complètement novice en C, et n'arrive pas à le comprendre.
Pour un débutant, il est très bénéfique pour la lire sur
pointer arithmetic
. Google le terme, vous obtiendrez de nombreux hits. Cela vous aidera à comprendre ce que les autres sont en train de parler. Par exemple: char* contents_chopped = contents + 1;
.
OriginalL'auteur Ash | 2010-11-28
Vous devez vous connecter pour publier un commentaire.
Ou, si le pointeur peut être modifié:
ahh, c'est ce que le " mem " fonctions de chaînes de caractères.h au frais. Cette première suggestion fonctionne parfaitement!
et notez que vous devez utiliser
memmove
, pasmemcpy
, parce quememmove
est nécessaire pour gérer le chevauchement de source/de destination correctement.Notez également que si vous utilisez
++
version, alors le programme va planter si vous essayez de libérer le incrémenté pointeur. Utiliser @Grigori suggerstion dans ce cas. Aussi, sur de courtes chaînes,memmove
pourrait effectuer plus lentement que d'une simple boucle en raison de son coût d'initialisation.OriginalL'auteur ruslik
char* contents_chopped = contents + 1;
Ce résultat
contents_chopped
pointant vers la même chaîne, à l'exception du premier char sera le prochain après \nAussi, cette méthode est plus rapide.
contents
, donc c'est bien si vous voulez seulement faire quelques processus rapide surcontents_chopped
. Également besoin de vérifier pour la chaîne vide.+1 pour donner la réponse que tout le monde réel code doit utiliser. Copier/déplacer une chaîne entière juste pour faire usage de sa queue est d'un ridicule perte de temps, mais il y a malheureusement beaucoup de programmes qui en fait faire de telles choses...
J'aime comment il est simple, mais vous ne pouvez pas libérer contents_chopped, car il a besoin que.
OriginalL'auteur
Ne suffit d'incrémenter le pointeur si vous avez malloc avais toute la mémoire ou votre programme plantera. libre a besoin de l'original de pointeur. Vous pouvez copier le pointeur, faites un nouveau bloc de mémoire et memcpy, y accéder comme ptr+1 ou tout un tas d'autres façons, mais les gens qui disent juste incrémenter le pointeur de vous donner dangereux conseils. Vous pouvez exécuter cet exemple de programme et de voir ce qui se passe quand vous "juste incrémenter le pointeur".
Astuce: Voici le résultat:
OriginalL'auteur mfisch
Il semble que si vous êtes sous l'impression qu'un char* "contient" des personnages. Il ne le fait pas. Il se contente de points à un octet. Le reste de la chaîne est implicite, se composent de l'octet en mémoire jusqu'à la prochaine octet null. (Vous devriez aussi être conscient que, bien que le 'char' type de données est un octet, par définition, il n'est pas vraiment un personnage - s'il vous plaît être conscient de l'Unicode - et ni est un octet nécessairement un octet.)
Le char* n'est pas un tableau, soit, bien qu'il puisse exister un tableau de caractères tels que le pointeur pointe vers le début de ce tableau.
OriginalL'auteur Karl Knechtel
OriginalL'auteur deepak kumar Pranjay
Voici mon code
}
OriginalL'auteur Sam