Forum: Compiler & IDEs strcpy Funktion für XC32 MPLABX Microchip


von Dirk F (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich möchte erstmalig Strings verarbeiten.
Compiler ist XC32 von Microchip.

Irgendwie finde ich keine passende Syntax oder eine fertige Funktion 
einer Lib.
Wer kann helfen ?

von Peter II (Gast)


Lesenswert?

Dirk F schrieb:
> Wer kann helfen ?

was bedeutet "Geht nicht" (das mit dem strcpy)?

von DirkF (Gast)


Lesenswert?

Tja der Compiler meckert halt, weil irgend ein include wohl fehlt...

von Peter II (Gast)


Lesenswert?

DirkF schrieb:
> Tja der Compiler meckert halt, weil irgend ein include wohl fehlt...

dann schreibt es doch rein.

(Tipp: Es ist oft hilfreich, Fehlermeldungen zu Posten )

von Dirk F (Gast)


Lesenswert?

Aha, jetzt geht es.
Das Problem war, dass der Textpuffer von typ unsigned char war, habe ihn 
auf char geändert.
Gruß Dirk

von Teo D. (teoderix)


Lesenswert?

Dirk F schrieb:
> Irgendwie finde ich keine passende Syntax oder eine fertige Funktion
> einer Lib.
> Wer kann helfen ?

http://ww1.microchip.com/downloads/en/DeviceDoc/51685E.pdf

von DirkF (Gast)


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.

von Peter II (Gast)


Lesenswert?

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.

von DirkF (Gast)


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.

von Markus F. (mfro)


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.

von Peter II (Gast)


Lesenswert?

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.

von DirkF (Gast)


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....???

von Peter II (Gast)


Lesenswert?

DirkF schrieb:
> Ist das so richtig ?
>
>    strcpy ( (char) testpuffer,"_Meldetext");
>    strcpy ( (unsigned char) testpuffer,"_Meldetext");
>    strcpy ( (signed char) testpuffer,"_Meldetext");

nein, das fehlt der *

von DirkF (Gast)


Lesenswert?

....und wo kommt das * hin ?

von Peter II (Gast)


Lesenswert?

DirkF schrieb:
> ....und wo kommt das * hin ?
1
strcpy ( (char*)testpuffer,"_Meldetext");

von DirkF (Gast)


Lesenswert?

Super Danke Peter. Er comiliert jetzt ohne Warnmeldung...
Gruß Dirk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.