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 C2440: '=' : cannot convert from 'char *' to 'char [80]


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut error C2440: '=' : cannot convert from 'char *' to 'char [80]
    Ce post est plus pour comprendre que pour être corrigé, (bien que je ne refuse jamais un conseil )

    Je pensais que si j'avais un :
    char toto[80];

    alors toto etait un pointeur.

    Et si c'est bien le cas, pourquoi ai je cette erreur ?
    error C2440: '=' : cannot convert from 'char *' to 'char [80]'

    sachant que je la génère de cette manière :
    wchar_t * toto_S= _TEXT("on s'en fiche");
    toto = UnicodeToAnsi(toto_S);
    ou le prototype de ma fonction est
    LPSTR UnicodeToAnsi(LPCWSTR s)

    Je compile avec visual c++ 6.0 en MFC avec _UNICODE de défini

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    Après m'être fait tapé sur les doigts quelques fois, je peux tenter une réponse!

    un char[] peut servir de char* (en général, ne va pas toucher l'allocation...)
    un char* n'est pas un char[80].

    donc tu ne peux pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* p = ...;
    char truc[80] = p;

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 126
    Points : 33 033
    Points
    33 033
    Billets dans le blog
    4
    Par défaut
    C'est la promixuité entre pointeur et tableau en C (à fortiori statique) qui induit en erreur.
    Tu peux utiliser un pointeur vers le tableau, pas l'inverse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char str0[80];
    char* str1 = str0; // ok, str1 pointe vers le premier élément de str0
    char* str2 = "toto";
    char str3[5] = str2; // erreur

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Oui en fait ça me parait logique.

    En relisant rapidement les bases j'ai compris aussi mon erreur :
    ma fonction malloc mon char * pour ensuite le renvoyer. Donc je fais aussi l'erreur d'écraser mon ancien tableau, ou plutot de le mettre aux orties sans le libérer.

    Merci pour vos réponses rapides

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2015, 10h57
  2. Réponses: 20
    Dernier message: 23/01/2007, 15h34
  3. Cannot convert Ansistring to char*
    Par kaizer dans le forum C++Builder
    Réponses: 8
    Dernier message: 20/10/2006, 00h55
  4. Type mismatch: cannot convert from Integer to int
    Par littleb dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 16/10/2006, 22h35

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