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 :

prob de chaine de caractère C


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 35
    Points
    35
    Par défaut prob de chaine de caractère C
    jé un problème
    jé déclaré un tableau de chaine de caractère char *tab[100];et je lé rempli
    si je met printf dans la meme boucle où jé rempli j'obtient le bon resultat mé si je sors de la boucle il ne m'affich rien comme si le tableau na pas était initialisé.
    voici le code:
    .
    .
    .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(i==k+1){
              itoa(i,g,10);
         strcat(PCC[n],g);
         //printf("\n PCC[%d]=%s",n,PCC[n]);lorsque j'affiche ici il n ya rien dans PCC[n]
         }
         strcat(c,PCC[i]);
         PCC[i]=c;
         printf("\n PCC[%d]=%s",i,PCC[i]);//lorsque j'affiche ici c à d ds la boucle ca marche (i est le incrément);
     
         strcpy(c," ");
       }
     getch();
     
     }
    NB: c que jé donner né pas complet il ya du code avant*

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Salut !


    jé déclaré un tableau de chaine de caractère char *tab[100];et je lé rempli
    Dans un tableau de pointeurs sur char, les pointeurs doivent êtres alloués avec malloc sinon c'est normal que ca ne fonctionne pas, surtout si en plus t'essaye de faire un strcat ou strcpy sur une zone non allouée au préalable !



    PS: Un petit Bonjour au début, Merci à la fin ne fait pas de mal
    PPS: Un petit effort de français reste à faire. Il faut éviter, autant que faire se peut, d'utiliser des mots raccourcis genre SMS, c'est dans les règles !


    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Qu'y a-t-il dans strcat(PCC[n],g); avant l'appel ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    comment ca se fait l'allocation avec malloc d'un char *tab[100]? tu peux me l'écrire s'il te plait
    merci d'avance

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Franck.H
    Dans un tableau de pointeurs sur char, les pointeurs doivent êtres alloués avec malloc
    • Les pointeurs sont déjà définis. Il n'y a pas de 'pointeurs à allouer'.
    • Pour pouvoir être utilisés, ils doivent contenir l'adresse d'un bloc valide. Ici, ce n'est pas le cas.
    • Pour initialiser un pointeur, il suffit de l'affecter (ou de l'initialiser) avec une adresse valide. malloc(), qui alloue un bloc de données, est une solution. On peut aussi stocker les valeurs retournée par strtok() ou faire tout autre opération valide (adresse d'un bloc statique ou local...).
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    • Les pointeurs sont déjà définis. Il n'y a rien à allouer
    • Pour pouvoir être utilisés, ils doivent contenir l'adresse d'un bloc valide. Ici, ce n'est pas le cas.
    • Pour initialiser un pointeur, il suffit de l'affecter (ou de l'initialiser) avec une adresse valide. malloc(), qui alloue un bloc de données, est une solution. On peut aussi stocker les valeurs retournée par strtok() ou faire tout autre opération valide (adresse d'un bloc statique ou local...).
    Mouais, étant donné qu'il fait tout dans une boucle, je suis pas sûr que ca a l'air de fonctionner pour lui, j'ai porposé le malloc car au moins il ne perd rien en sortant du corps de la boucle, je pensais bien faire, en tout cas c'est de cette manière que j'aurais fait.

    J'ai jamais essayé de faire des strcat et strcpy comme ca, sans allouer un espace au préalable
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Minoucha2006
    comment ca se fait l'allocation avec malloc d'un char *tab[100]? tu peux me l'écrire s'il te plait
    merci d'avance
    Tu as un certain nombre de pointeurs à renseigner. Ca sent la boucle avec malloc(), non ? Ca parait assez basique. Ca fait longtemps que tu fais du C ?
    • Si c'est oui, ben tu devrais le savoir
    • Si c'est non, les tableaux de pointeurs, c'est peut être un peu chaud...
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    je connait mais j'ai oublié
    merci

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    c'est comme ca?
    char *PCC[100]=malloc(sizeof(char*));
    c'est correcte?

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Minoucha2006
    c'est comme ca?
    char *PCC[100]=malloc(sizeof(char*));
    c'est correcte?
    Ben non. Tu veux allouer quoi ? Un tableau de char pour y ranger une chaine de caractères, non ?

    Pour chaque pointeur du tableau : il faut définir cette taille (constante, calcul, mesure), et allouer la taille nécessaire (rappel, sizeof (char) vaut 1 par définition). Ensuite, on stocke l'adresse retournée par malloc() dans un des pointeurs du tableau. Si elle est non NULL, on peut continuer.

    Ne pas oublier de libérer tout le bazar quand on en a plus besoin.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Minoucha2006
    c'est comme ca?
    char *PCC[100]=malloc(sizeof(char*));
    c'est correcte?
    Tu possèdes déjà une boucle à ce que tu as énnoncé donc tu as déjà tout, il te suffit de faire ton allocation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    PCC [i] = malloc (taille_de_la_chaîne);
    au début de ta boucle et de tester le retour de malloc et c'est parti !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Crypter une chaine de caractères
    Par Yabo dans le forum Réseau
    Réponses: 18
    Dernier message: 19/11/2004, 23h04
  3. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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