Ungültige Konvertierung von 'const char*' in 'unsigned char*'
Einem einfachen C++ code:
int main(){
unsigned char* t="123";
}
auf compilation mit g++ gibt folgenden Fehler:
invalid conversion from ‘const char*’ to ‘unsigned char*’ [-fpermissive]
Warum?
- Weil ein string-literal const.
- Danke. So, wie es zu lösen? Abgesehen von der Verwendung von std::string
- Und ja, wenn es string-Literale, die der gcc nicht geben Fehler auf, die.
- Wenn du meinst, dass mit einem C-compiler keinen Fehler, das ist (teilweise) da in C
"123"
Typchar[4]
in der Erwägung, dass in C++ hat den Typconst char[4]
. gcc , wenn nicht aufgerufen werden, im standard-Modus, ermöglicht auch die Konvertierung zwischenchar *
undunsigned char *
ohne cast const unsigned char* tmp= reinterpret_cast<const unsigned char *>( "123" ); t = const_cast<unsigned char *>(tmp)
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C++ string-Literale haben Arten von Konstanten Zeichen-arrays. Zum Beispiel string-literal
"123"
Typconst char[4]
.In Ausdrücken mit seltenen Ausnahmen-arrays umgewandelt zu Zeiger auf Ihre ersten Elemente.
So, in dieser Erklärung
die Initialisierung Typ
const char *
. Es gibt keine implizite Konvertierung vonconst char *
zuunsigned char *
Könnten Sie schreiben,
const char[4]
Einen anderen Ansatz, die Sie bekommt einen modifizierbaren
unsigned char
array, wie man ursprünglich wollte, ist:Können Sie hinzufügen
const
beiden Erklärungen, wenn Sie möchten, zu bekommenconst unsigned char
ohne einen expliziten cast.Konvertierungen von einem Datentyp in einen anderen Typ ist einfach, wenn Sie verwenden Sie selbst definierte Makros. Also hier ist ein Satz von Makros, die Sie verwenden können, auf einer beliebigen Plattform (Windows, Linux, Solaris, AIX etc...)
In Ihrem Fall
entspricht
Verwenden Sie einfach
nur char* Ort, unsigned char* während der Erklärung
char t[MAX_SIZE] = "123"; //MAX_SIZE sollte, werden vorher definiert
Zeit getestet strcpy() und strncpy Funktionen