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 :

error: incompatible types in assignment


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut error: incompatible types in assignment
    bonsoir à tous,

    je me suis créer une petite fonction split pour éclater une chaine et mettre chaque element dans un tableau:

    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
     
    char **split(char *buf, char delim)
    {
    	unsigned int idx = 0;
    	char *list[MAXPARA];
     
    	while (*buf)
    	{
    		while (*buf == delim) *buf++ = 0;
    		/* dans le cas ou l'argument commence par un ':' on le supprime */
    		if (*buf == ':')
    		{
    			list[idx++] = buf + 1;
    			break;
    		}
    		/* on recupere l'argument */
    		list[idx++] = buf;
    		while (*buf && *buf != ' ') ++buf;
    	}
    	list[idx] = NULL;
    	return list;
    }
    cette dernière me retourne le tableau, mon probleme se situe au moment de recuperer sa valeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // buffer contient une chaine de caracteres
    char *tab[MAXPARA];
     
    tab = split (buffer, ' ');
    j'ai l'erreur 'error: incompatible types in assignment'
    j'ai encore un peu de mal avec les pointeurs j'imagine que la valeur de retour du split n'est pas compatible avec ma declaration du tableau mais je n'en suis pas sur et je ne sais comment faire autrement

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    j'ai encore un peu de mal avec les pointeurs j'imagine que la valeur de retour du split n'est pas compatible avec ma declaration du tableau mais je n'en suis pas sur et je ne sais comment faire autrement
    C'est plus fondamental que ça : tab est un tableau (de pointeur sur char) et on ne peut jamais écrire "tableau = quelque chose ;"

    Il faut passer le tableau tab en argument de split() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void split(char *buf, char delim, char** list)
    {
    	unsigned int idx = 0;
    	while (*buf)
    	{
    ....
    	}
    	list[idx] = NULL;
    }
    ....
    char *tab[MAXPARA];
     
    split (buffer, ' ',tab);
    Remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (*buf == delim) *buf++ = 0;
    Pourquoi modifier la chaine de départ ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    merci pour ton aide, oui en effet je modifie la chaine c'est pas terrible, il faudrait mieux que je stock la chaine dans un autre pointeur pour la parcourir

  4. #4
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par havoc50 Voir le message
    merci pour ton aide, oui en effet je modifie la chaine c'est pas terrible, il faudrait mieux que je stock la chaine dans un autre pointeur pour la parcourir
    Non, tu peux sans problèmes utiliser le pointeur buf

    Mais pourquoi ne pas simplement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (*buf == delim) buf++;
    ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    je marquai mes positions pour le découpage pour que chaque element se termine par le caractere de fin de chaine

  6. #6
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    je marquai mes positions pour le découpage pour que chaque element se termine par le caractere de fin de chaine
    Ok.
    Dans ce cas, pourquoi ne pas utiliser strtok() ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    strtok modifie son 1er argument donc au final je modifie ma chaine également, de plus j'ai souvent entendu dire qu'il fallait éviter cette fonction

    si vous voyez une autre manière plus efficace pour la fonction split je suis preneur

Discussions similaires

  1. error: incompatible types when assigning
    Par quentinb56 dans le forum C
    Réponses: 2
    Dernier message: 05/12/2013, 20h31
  2. error: incompatible types in assignement
    Par Melwen dans le forum Débuter
    Réponses: 3
    Dernier message: 02/05/2010, 20h34
  3. Réponses: 4
    Dernier message: 25/02/2010, 17h14
  4. error: incompatible types in assignment
    Par panda31 dans le forum C
    Réponses: 2
    Dernier message: 13/06/2006, 10h46
  5. Réponses: 4
    Dernier message: 05/12/2005, 19h24

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