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 :

[pointeurs][tableaux]copier un tableau dans un indice de tab


Sujet :

C

  1. #1
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut [pointeurs][tableaux]copier un tableau dans un indice de tab
    Bonjour,

    j'ai une chaine de caractere dans un tableau:
    liste[15]={11,12,13,14,15}

    je voudrais avoir ceci:
    tab[0]="11";
    tab[1]="12";
    ...

    mais je n'y arrive pas;

    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
    16
    17
    18
    19
    20
     
    				for (k=0;k<strlen(h_liste_uc) || h_liste_uc[k]!='\0';k++)
    				{
    					if (h_liste_uc[k]==',')
    					{
    						uc[e++]='\0';
    						Trace(9,"uc: [%s]",uc);
    						tabUc[b]=uc;
    						b++;
    						Trace(9,"tabUc: [%s]",tabUc[0]);
    						Trace(9,"tabUc: [%s]",tabUc[1]);
    						Trace(9,"tabUc: [%s]",tabUc[2]);
    						e=0;
    						/*memset(uc,NULL,sizeof(uc));*/
    					}
    					else
    					{
    						uc[e++]=h_liste_uc[k];
    					}
    				}

    j'obtiens ceci;

    # 13/01/2006 13:51:08 # uc: [00031]
    # 13/01/2006 13:51:08 # tabUc: [00031]
    # 13/01/2006 13:51:08 # tabUc: [(null)]
    # 13/01/2006 13:51:08 # tabUc: [(null)]
    # 13/01/2006 13:51:08 # uc: [10046]
    # 13/01/2006 13:51:08 # tabUc: [10046]
    # 13/01/2006 13:51:08 # tabUc: [10046]
    # 13/01/2006 13:51:08 # tabUc: [(null)]
    # 13/01/2006 13:51:08 # uc: [10300]
    # 13/01/2006 13:51:08 # tabUc: [10300]
    # 13/01/2006 13:51:08 # tabUc: [10300]
    # 13/01/2006 13:51:08 # tabUc: [10300]

    Merci de votre aide

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Franchement l'énoncé n'est pas très clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char tChaine[15];
    char tab[15];
    int i;
     
    for ( i = 0 ; i<15 ; i++) tab[i]=tChaine[i];
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut
    je pense pourtant que l'énoncé est simple;
    j'ai une chaine de caractere avec des valeurs séparées de virgules.
    je veux la parser pour mettre les valeurs dans un nouveau tableau.

    la chaine chaine[]=12,15,16,19 devient
    tab[0]=12
    tab[1]=15
    tab[2]=16
    tab[3]=19

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Tu as regardé comment fonctionne la fonction strtok ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut
    oui j'ai regardé,
    mais on revient tjs au meme probleme

    je n'arrive pas a copier le la chaine "12" dans l'indice 2 du tableau.
    strtok genere un pointeur et ce serait aussi "12"
    j'arrive bien a copier le premier element dans l'indice 0 du nouveau tableau mais dès le second il me le copie a la fois dans l'indice 0 et dans l'indice 1 alors que je veux qu'il le copie dans l'indice 1 (cf traces message 1)

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Tu pourrais poster le code où tu utilises strtok parce qu'avec le code que tu postes ci-dessus franchement on y voit pas trés clair du tout ( en tout cas pas l'appel à strtok)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  7. #7
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut
    je ne pense pas que le code est compliqué pour du C!!!!
    il y a 1 seule boucle et 1 if!

    et je n'ai plus le code du strtok

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par zozolh2
    je ne pense pas que le code est compliqué pour du C!!!!
    il y a 1 seule boucle et 1 if!

    et je n'ai plus le code du strtok
    Essai de nous poster un code compilable vraiment c'est la meilleure façon d'avancer.

    A moins que quelqu'un veut bien prendre le relai avec ce que tu fournis comme information cela ne me dérange pas.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  9. #9
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut
    je veux avoir ceci;

    http://membres.lycos.fr/dancel/c/c50_100.htm

  10. #10
    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
    Je crois que ce petit bout de code fait ce que tu cherches :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(void)
    {
        char liste[15]="11,12,13,14,15";
    	char *tmp = strdup(liste);
    	char *tab[10];
    	int nb;
     
    	if (tmp != NULL)
    	{
    	   char *q = strtok(tmp, ",");
    	   int i;
    	   nb = 0;
     
    	   while (q != NULL)
    	   {
    	      tab[nb++] = q;
    		  q = strtok(NULL, ",");
    	   }
    	   for(i = 0; i < nb; i++)
    		puts(tab[i]);
     
    	   free(tmp);
    	}
    	return 0;
     
    }
    "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

  11. #11
    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 Re: [pointeurs][tableaux]copier un tableau dans un indice de
    Citation Envoyé par zozolh2
    j'ai une chaine de caractere dans un tableau:
    liste[15]={11,12,13,14,15}
    ??? Même en admettant que liste est de type char, 11,12 sont peut être des caractères (lequels, ça dépend du charset), mais il n'y a pas de 0 final. Ce n'est donc pas une chaine.
    je voudrais avoir ceci:
    tab[0]="11";
    tab[1]="12";
    si les éléments de tab sont des char* ou des tableaux de char, c'est possible...
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Compiling: main.c
    main.c:1: error: syntax error before "for"
    main.c:6: error: syntax error before numeric constant
    main.c:6: warning: type defaults to `int' in declaration of `Trace'
    main.c:6: warning: function declaration isn't a prototype
    main.c:6: warning: data definition has no type or storage class
    main.c:7: error: `b' undeclared here (not in a function)
    main.c:7: warning: type defaults to `int' in declaration of `tabUc'
    main.c:7: error: `uc' undeclared here (not in a function)
    main.c:7: warning: data definition has no type or storage class
    main.c:8: error: syntax error before '++' token
    main.c:9: error: syntax error before numeric constant
    main.c:9: warning: type defaults to `int' in declaration of `Trace'
    main.c:9: warning: function declaration isn't a prototype
    main.c:9: warning: redundant redeclaration of 'Trace'
    main.c:6: warning: previous declaration of 'Trace' was here
    main.c:9: warning: data definition has no type or storage class
    main.c:10: error: syntax error before numeric constant
    main.c:10: warning: type defaults to `int' in declaration of `Trace'
    main.c:10: warning: function declaration isn't a prototype
    main.c:10: warning: redundant redeclaration of 'Trace'
    main.c:9: warning: previous declaration of 'Trace' was here
    main.c:10: warning: data definition has no type or storage class
    main.c:11: error: syntax error before numeric constant
    main.c:11: warning: type defaults to `int' in declaration of `Trace'
    main.c:11: warning: function declaration isn't a prototype
    main.c:11: warning: redundant redeclaration of 'Trace'
    main.c:10: warning: previous declaration of 'Trace' was here
    main.c:11: warning: data definition has no type or storage class
    main.c:12: warning: type defaults to `int' in declaration of `e'
    main.c:12: warning: data definition has no type or storage class
    main.c:14: error: syntax error before '}' token
    main.c:7: error: storage size of `tabUc' isn't known
    Process terminated with status 1 (0 minutes, 1 seconds)
    Ce code n'est pas compilable. Pour le rendre compilable, ilf aut des tas d'hypothèses probablement différentes de ta réalité, donc sans signification réelle. Il faut poster un code complet, compilable (si possible) et réduit au minimum, qui montre le défaut.
    j'obtiens ceci;
    Et moi, je n'obtiens rien du tout.
    Pas de Wi-Fi à la maison : CPL

  12. #12
    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 zozolh2
    je pense pourtant que l'énoncé est simple;
    Peut être, mais il est mal expliqué. trop d'approximations.
    j'ai une chaine de caractere avec des valeurs séparées de virgules.
    je veux la parser pour mettre les valeurs dans un nouveau tableau.

    la chaine chaine[]=12,15,16,19
    Alors écrit la correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       char chaine[]="12,15,16,19";
    devient
    tab[0]=12
    tab[1]=15
    tab[2]=16
    tab[3]=19
    Ok, c'est nettement plus clair. strtol() permet de faire ça. C'est plus facile si les ',' sont des ' '. Traité ici :

    http://www.developpez.net/forums/viewtopic.php?t=441745
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut
    merci,

    mais 1) je ne peux pas donner le code complet -> sécurité
    je voulais juste une analyse de l'erreur de code ou algo que j'ai pu faire

  14. #14
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut
    Merci Trap D, c'est bien ce que je voulais faire.

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

Discussions similaires

  1. copier un tableau dans un autre
    Par 01211983 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 05/03/2008, 14h22
  2. [Tableaux] Mettre un tableau dans un champ caché
    Par -Neo- dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2007, 11h49
  3. Réponses: 11
    Dernier message: 13/12/2006, 12h13
  4. Réponses: 2
    Dernier message: 02/06/2006, 09h04
  5. [Tableaux] Passer un tableau dans une requête HTTP ??
    Par haffouff dans le forum Langage
    Réponses: 2
    Dernier message: 09/05/2006, 17h17

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