strcpy Funktion für XC32 MPLABX Microchip

Gast #4342269
Lesenswert?

Hallo, jetzt muss ich doch nochmal nachfragen an die Experten:

Der Code:

    unsigned char testpuffer [40];
    strcpy ( testpuffer,"_Meldetext");

erzeugt eine warning: pointer targets in passing argument 1 of 'strcpy' 
differ in signedness

Dieser Code wird fehlerfrei compiliert:
    signed char testpuffer [40];
    strcpy ( testpuffer,"_Meldetext");

    char testpuffer [40];
    strcpy ( testpuffer,"_Meldetext");

Compiler ist der XC32.
Laut Handbuch ist plain char standardmäßig vom type signed !!!
Bei den 8-Bit compilern ist char standardmäßig unsigned!

In der 32-bit lib "string.h"  sind die Parameter für die Funktion strcpy 
als char definiert, d.h. der compiler macht daraus ein signed char.

Die Lib kann und möchte ich auch nicht verändern.
Ich brauche aber für Strings den Typ unsignbed char, da andere 
Funktionen das so haben wollen.

Also wie kann ich dem Compiler beibringen, dass er aus char den Typ 
unsigned char machen soll ?

Im Handbuch vom compiler steht die Option -funsigned-char
Ich weiß nicht genau, wo man dies Funktion eintragen muss.

Oder wie kann ich 2 verschiedene String Typen koperen ? :

    signed char testpuffer1 [40];
    unsigned char testpuffer2 [40];
    testpuffer1 = testpuffer2 ;   // erzeugt wieder eine Compilerwarnung 
?

Danke für eure Hilfe.
Gast #4342297
Lesenswert?

HAllo Peter,
versteh ich nicht.

Ich möchte die LIB nicht verändern, damit auch neuere Versionen des 
Compiler laufen.

Welche Funktion soll ich abändern ?
Die Lib "string.h"  oder den TCP-IP Stack von mIctrochip ?
Beides möchte ich nicht machen.
#4342421
Lesenswert?

die strcpy()-Funktion erwartet zwei Strings vom "Default-char"-Typ. Der 
ist - abhängig von der Plattform und vom Schalter "-funsigned-char" bzw. 
"-fno-unsigned-char" - eben signed oder unsigned.

Wie das bei dir genau ist, mußt Du in der Dokumentation nachlesen.

Wenn die Typen nicht passen - der Default-char-Typ also z.B. unsigned 
char ist, Du aber einen signed char an strcpy übergeben willst - dann 
hilft ein Cast, um die Warnung loszuwerden.
Gast #4342471
Lesenswert?

Hallo zusammen,
danke für die HInweise.
Wie sieht denn der Syntax for do einen cast aus ?


Ist das so richtig ?

   strcpy ( (char) testpuffer,"_Meldetext");
   strcpy ( (unsigned char) testpuffer,"_Meldetext");
   strcpy ( (signed char) testpuffer,"_Meldetext");

In allen 3 Fällen wir aber wieder eine Warnmeldung ausgegeben....???

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren