Konvertierungsfehler der anderen Art



  • Hallo zusammen,

    ich erhalte beim kompilieren in Visual C++ 2008 folgenden Fehler:

    error C2664: 'sprintf': Konvertierung des Parameters 1 von 'unsigned char *' in 'char *' nicht möglich
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    Die Funktion in der der Fehler auftritt:

    void appendItoa(unsigned char number, unsigned char* buff) {
    
    	buff = getEndPointer(buff);
    	//set number
    	sprintf(buff, "%i", number);  // Fehler :confused:  :confused: 
    }
    

    und die getEndPointer-Funktion:

    unsigned char* getEndPointer(unsigned char* ptr) {
    	while (*ptr != '\0') {
    		ptr++;
    	}
    	return ptr;
    }[code]
    

    Deklarationen:

    unsigned char* getEndPointer(unsigned char* ptr);
    void appendItoa(unsigned char number, unsigned char* buff);
    

    Der Originalquellcode ist aus einem C-Programm. Funktioniert die Konvertierung in C++ nicht??

    Hat jemand eine Idee?

    Vielen Dank im Voraus.

    Grüße

    datatom


  • Mod

    Ein char* ist nunmal kein unsigned char*.
    Also mach was die Fehlermeldung sagt und verwende reinterpret_cast.

    Aber mal eine ganz andere Frage: Warum verwendest Du überhaupt unsigned char*?



  • Entschuldigt bitte, ich hab da ein paar Zwischenfragen: Was sollte besser daran sein BYTE zu verwenden (Das hast Du doch im Sinn, oder)? Wieso wird BYTE überhaupt als unsigned char definiert? Und wann sollte man char und unsigned char verwenden. BTW.: Ich nutze auch immer unsigned char für die Definition eines 8-Bit Typs, aber auch nur weil das eben die Definition von BYTE ist.


  • Mod

    BYTE würde ich da nehmen wo ichBYTE brauche.
    Strings sind eben char oder wchar_t.



  • Hallo zusammen,

    ich habe den Quelltext aus einem C-Programm kopiert. Warum der Programmierer das so programmiert hat, weiß ich nicht. Ich werde die Zeilen aber erst einmal entfernen, um zu schauen, ob das Programm überhaupt funktioniert.

    Grüße

    datatom

    PS: Der nächste Beitrag wird gleich ins Netz gestellt, tut mir Leid.


Anmelden zum Antworten