Invalid conversion from ‘const char*’ to ‘unsigned char*’
Un simple code C++:
int main(){
unsigned char* t="123";
}
sur la compilation avec g++ donne l'erreur suivante:
invalid conversion from ‘const char*’ to ‘unsigned char*’ [-fpermissive]
Pourquoi?
Parce qu'un littéral de chaîne est const.
Merci. Alors, comment le résoudre? Outre l'utilisation de std::string
Et oui, si c'est une chaîne littérale, gcc ne donne pas d'erreur sur ce point.
Si vous voulez dire que l'utilisation d'un compilateur C ne donne pas une erreur, c'est (en partie) parce que, dans C ,
Merci. Alors, comment le résoudre? Outre l'utilisation de std::string
Et oui, si c'est une chaîne littérale, gcc ne donne pas d'erreur sur ce point.
Si vous voulez dire que l'utilisation d'un compilateur C ne donne pas une erreur, c'est (en partie) parce que, dans C ,
"123"
a type char[4]
alors qu'en C++, elle est de type const char[4]
. gcc , si ce n'est invoquée dans le mode standard, permet également la conversion entre les char *
et unsigned char *
sans un casting
OriginalL'auteur anupamD | 2015-12-26
Vous devez vous connecter pour publier un commentaire.
En C++ littéraux de chaîne ont des types de constant des tableaux de caractères. Par exemple littéral de chaîne
"123"
a typeconst char[4]
.Dans les expressions avec de rares exceptions, les tableaux sont convertis à des pointeurs de leurs premiers éléments.
Donc dans cette déclaration
l'initialiseur de type
const char *
. Il n'y a pas de conversion implicite deconst char *
àunsigned char *
Vous pouvez écrire
Il est préférable de suivre la norme au lieu d'utiliser des extensions de langage du compilateur.:)
L'initialiseur de type
const char[4]
OriginalL'auteur Vlad from Moscow
Une autre approche, qui vous procure un modifiable
unsigned char
tableau que vous vouliez à l'origine, est:Vous pouvez ajouter
const
pour les deux déclarations si vous le souhaitez, pour obtenirconst unsigned char
sans un cast explicite.OriginalL'auteur Davislor
Les Conversions d'un type vers un autre type est facile lorsque vous utilisez des macros définies. Donc, ici, est un ensemble de macros que vous pouvez utiliser sur n'importe quelle plateforme (Windows, Linux, Solaris, AIX, etc...)
Dans votre cas
est équivalent à
Pourquoi en bas de vote? Si elle est mauvaise, alors il est acceptable, mais je vais essayer d'aider les programmeurs qui veulent utiliser des macros dans les conversions. Ce n'est pas un must pour l'utilisation de macros, plutôt que n'importe qui peut utiliser le long des littéraux...
OriginalL'auteur SajithP
Simplement utiliser
juste char* à la place de unsigned char* lors de la déclaration de
char t[MAX_SIZE] = "123"; //MAX_SIZE doit être défini précédemment
le temps de tester strcpy() et strncpy fonctions
OriginalL'auteur malang