IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Supprimer les premiers caractères d'une chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut Supprimer les premiers caractères d'une chaine
    Bonjour,
    Je début en C,
    J'ai un char[] et je voudrais en supprimer les 6 premiers caractères.
    J'ai tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hostname = strpbrk(hostname, "host: ");
    mais si ça compile, ça ne fonctionne pas.
    J'ai vu les messages ICI et LA mais je me demande s'il n'y a pas une fonction déjà toute faite qui fait ça directement?
    Merci!

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hostname = strcpy(hostname, hostname + 6);

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Citation Envoyé par 6-MarViN Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hostname = strcpy(hostname, hostname + 6);
    Il ne faut jamais utiliser cette fonction lorsque les deux chaînes se chevauchent.

    edit:
    GRILLED

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    hmm je viens d'apprendre quelque chose là.

  5. #5
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Ouah! Je vais apprendre pas mal de trucs sur les pointeurs en lisant vos commentaires!

    J'ai trouvé une solution très simple finalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *hostname;
    	hostname = "host: first.ovh.net";
    	char *host;
    	host = strstr(hostname, "host: ") + 6;
    	printf(host);
    Qui semble marcher correctement.
    Et je me rends compte que je ne vous ai pas donné la totalité du problème car vous ne pouviez pas inventer que le pattern 'host: ' que je recherchais est fixe :-S

    En tout cas merci beaucoup pour votre coup de main!

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut

    Au final, la question posée ne correspondait donc pas du tout à ton problème !

  7. #7
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    EDIT: GRILLED

    Bonjour,

    Pourquoi ne pas utiliser un strncpy?

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Ça changera rien. Lui ce qu'il veut c'est virer les 6 premiers caractères. Donc on fait un strcpy de la chaine en commençant au 6 ème caractère.

  9. #9
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Citation Envoyé par 6-MarViN Voir le message
    Ça changera rien. Lui ce qu'il veut c'est virer les 6 premiers caractères. Donc on fait un strcpy de la chaine en commençant au 6 ème caractère.
    Je sais bien j'ai posé ma question à l'OP pour lui donner une piste, et tu m'as grilled dans l'intervalle :p

  10. #10
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Désolé. Je post plus vite que mon ombre.

  11. #11
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Merci pour vos réponses rapides, les gars,

    J'ai tenté de faire un autre truc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    char *hostname = "host: first.ovh.net";
    	char *host;
    	int i = 0;
            //(jusque là c'est bon, mais la condition du while plante)
    	// Je parcours le mot
            //tant que la valeur mise sur l'adresse est différente de '\0'
            while(strcmp(*(&hostname+6+i),'\0') != 0)
    	{
                    // l'adresse de host est la même que celle de hostname
    		*host[i] = *(&hostname+6+i);
    		i = i+1;
    	}
            // enfin on termine le mot
    	host[i+1] = '\0';
    	printf(host);
    Et j'a l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: invalid type argument of \u2018unary *\u2019 (have \u2018int\u2019)
    :-S

  12. #12
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Pourquoi déréférencer host[i]?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while(strcmp(hostname[6]+i),'\0') != 0)
    	{
                    // l'adresse de host est la même que celle de hostname
    		host[i] = hostname[6]+i;
    		i = i+1;
    	}

    C'est pas plus simple?

  13. #13
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Exact, seeme;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    host[i] = *(&hostname+6+i);
    est plus logique. Mais ça ne change rien :-S

    Tu as dit qu'on peut faire un strcpy en commençant par le 6ème caractère, mais dans la doc, il n'y a pas d'argument pour ça :-S on ne peut que copier une chaine dans une autre strictement identique

    Merci pour tes réponses!

  14. #14
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Je me trompe peut-être mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcmp(*(&hostname+6+i),'\0') != 0
    ne serait pas la même chose que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hostname[6 + i] != '\0'
    ce qui fait aussi que cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *host[i] = *(&hostname+6+i);
    pourrait s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    host[i] = hostname[6 + i];

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. supprimer les premiers caractères d'une ligne
    Par cpalperou dans le forum Shell et commandes POSIX
    Réponses: 6
    Dernier message: 12/02/2013, 10h51
  2. prendre les premiers caractères d'une chaine
    Par tytous dans le forum PL/SQL
    Réponses: 5
    Dernier message: 23/12/2010, 10h58
  3. Supprimer les premiers caractères d'une chaîne
    Par supers dans le forum Word
    Réponses: 4
    Dernier message: 21/08/2009, 10h04
  4. Réponses: 2
    Dernier message: 19/06/2007, 16h37
  5. Supprimer le premier caractère d'une chaine de caractères
    Par Droïde Système7 dans le forum Langage
    Réponses: 2
    Dernier message: 30/09/2005, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo