6
votes

Erreur: types incompatibles dans l'attribution de 'const Char [5]' to 'Char [10]'

J'ai défini c comme xxx

dans la fonction de fonction et l'a utilisé comme c [i] = "gris";

Quoi tort? J'ai cherché sur Net, il montre la même syntaxe.

Merci.


1 commentaires

Eh bien, quel avertissement ou quelle erreur voyez-vous?


4 Réponses :


1
votes

Essayez d'utiliser Strcpy () (trouvé dans le cstring en-tête) au lieu d'une affectation simple.


0 commentaires

15
votes

Vous ne pouvez pas utiliser l'affectation ( = ) sur un tableau. Si vous modifiez C sur un tableau de pointeurs, cela pourrait fonctionner, en fonction de ce que vous devez faire avec elle. XXX

ou si le type déclaré doit être un tableau des tableaux, vous pouvez utiliser strncpy : xxx


2 commentaires

N'utilisez pas strncpy ! Cela peut potentiellement vous laisser avec des chaînes non nuls.


Ok.Manks @aschepler et @Adam



13
votes

Le problème est que les matrices ne sont pas assignables dans C. Constantes de cordes telles que "gris" sont des constantes de tableau de caractères: dans ce cas, le type est Char [5] (4 + 1 pour la null de terminaison).

Si vous savez que la matrice de destination est suffisamment grande pour maintenir la chaîne souhaitée, vous pouvez utiliser strcpy pour copier la chaîne comme: xxx

Une meilleure idée est d'utiliser un Fonction plus sûre telle que strlcpy (Systèmes basés sur BSD et Mac OS X) ou strcpy_s (Windows): xxx

Cependant, ces fonctions sont spécifiques à la plate-forme et non toutes portables. Vous pouvez également lancer votre propre implémentation si la vitesse n'est pas un problème: xxx

do n'utilise pas strncpy , depuis < Un href = "https://stackoverflow.com/questions/1453876/why-does-strncpy-not-null-terminate"> Cela pourrait potentiellement vous laisser avec une chaîne non nulnulée à terme


1 commentaires

strlcpy ?? Vouliez-vous dire 'Strncpy'? Typo là-bas, (modifier la file d'attente est complète)



1
votes

Ce code fonctionnera et apportera les attributions correctes de 3 manières différentes:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    string myString = "hello my friends from Brazil";
    char charOut[myString.size()];
    strncpy(charOut, myString.c_str(), myString.size());
    std::cout << "Char by strncpy string var  " << charOut << std::endl;

    const char *charOut2;
    charOut2 = "sup my homies in L.A.";
    std::cout << "Char by const  " << charOut2 << std::endl;

    string myString2 = "hallo mein bruder in Berlin";
    char charOut3[myString2.size()];
    strcpy(charOut3, myString2.c_str());
    std::cout << "Char by strcpy string var  " << charOut3 << std::endl;
}


0 commentaires