strcpy Funktion für XC32 MPLABX Microchip

Gast
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
DirkF schrieb:
> Ich brauche aber für Strings den Typ unsignbed char, da andere
> Funktionen das so haben wollen.

dann ändere diese Funktionen ab.

gehe einfach davon aus

char != unsigned char != signed char

char ist wie ein eigenen Datentyp zu betrachten.
Gast
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.
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
DirkF schrieb:
> Welche Funktion soll ich abändern ?
ich dachte die Funktionen sind von dir

> Die Lib "string.h"  oder den TCP-IP Stack von mIctrochip ?
> Beides möchte ich nicht machen.
verstädlich, zur not mit einem Cast arbeiten.
Gast
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.