Forum: Mikrocontroller und Digitale Elektronik Vergleichen von Zeichenketten in C funktioniert nicht


von Philipp F. (philipp5054)


Lesenswert?

Einen schönen Sonntag wünsch ich euch allen erst ein mal.
Ich habe folgendes Problem. Ich will einfach 2 Char Arrays vergleichen 
bekomme aber beim Kompilieren eine Warnmeldung und funktioniert auch 
nicht.
Habt ihr nen Tip?


char ausschalten[] = "mach an";
const char einschalten[] = "mach aus";   //nur zum versuch mal als const

if(strcmp(einschalten, TESTbuf1) == 0) PDR09  = DEC7SEG[1];
if(strcmp(ausschalten, TESTbuf1) == 0) PDR09  = DEC7SEG[0];;

Warnmeldung beim Kompilieren (Softunge Workbench Fujitsu 16FX)
*** d:\****\main.c(47) W1350C: argument passing incompatible pointer 
types: expected `const char *' actual `unsigned char *': argument 2 of 
`strcmp'
*** d:\****\main.c(48) W1350C: argument passing incompatible pointer 
types: expected `const char *' actual `unsigned char *': argument 2 of 
`strcmp'

Gruß Philipp

von g457 (Gast)


Lesenswert?

> Habt ihr nen Tip?

Vergleich mal die Deklaration von TESTbuf1 (in Zeile 42) mit der 
Fehlermeldung

> expected `const char *' actual `unsigned char *': argument 2 of `strcmp'
                  ^^^^            ^^^^^^^^^^^^^

HTH

von Philipp F. (philipp5054)


Lesenswert?

Ja das habe ich schon gesehen. Aber leider keine Idee wie ich das ändern 
kann. :-(

Wenn ich aus

unsigned char TESTbuf1[MAXBUF]; // Transmission Buffer

ein

const char TESTbuf1[MAXBUF]; // Transmission Buffer

machen würde. Könnte ich es ja nicht mehr wärend der Kaufzeit ändern 
also mit Daten füllen. Oder?

von Klaus W. (mfgkw)


Lesenswert?

if(strcmp(einschalten, (char*)TESTbuf1)...

Oder TESTbuf... nicht als unsigned char..., sondern als char... 
deklarieren

von Klaus W. (mfgkw)


Lesenswert?

Philipp F. schrieb:
> Wenn ich aus
>
> unsigned char TESTbuf1[MAXBUF]; // Transmission Buffer
>
> ein
>
> const char TESTbuf1[MAXBUF]; // Transmission Buffer
>
> machen würde. Könnte ich es ja nicht mehr wärend der Kaufzeit ändern
> also mit Daten füllen. Oder?

richtig, aber das Problem ist hier nicht das const, sondern das 
unsigned.

von g457 (Gast)


Lesenswert?

> Aber leider keine Idee wie ich das ändern kann.

Du hast zwei [1] Möglichkeiten: Den Datentyp ändern oder dem Compiler 
sagen, wie er es richtig(tm) hinbiegen kann.

Für zweiteres reicht ein einfacher Cast vor Ort.

HTH


[1] Warnungen sind nicht dafür da, ignoriert zu werden. 
Beide-Augen-fest-verschließen-und-mit-dem-Kopf-gegen-die-Betonwand ist 
also keine Alternative.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

aus
> unsigned char TESTbuf1[MAXBUF]; // Transmission Buffer
machste
char TESTbuf1[MAXBUF]; // Transmission Buffer
dann noch die vor ort casten und es rennt:
if(strcmp(einschalten, (const char*)&TESTbuf1) == 0) PDR09  = 
DEC7SEG[1];

von (prx) A. K. (prx)


Lesenswert?

Martin Wende schrieb:

> char TESTbuf1[MAXBUF]; // Transmission Buffer
> dann noch die vor ort casten und es rennt:

Gürtel-und-Hosenträger Prinzip? Eins davon reicht, egal welches.

Merkregel: Nur casten wenn nötig. Du castest nämlich sonst auch jene 
Fehler und Warnungen weg, die du gerne gehabt hättest.

von Philipp F. (philipp5054)


Lesenswert?

Ich liebe die Mietglieder dieses Forums!

Vielen Dank. Es funktioniert!

Habe mich übrigens fürs casten vor Ort enschieden.
Fehler welche noch irretierte:

...ausschalten[] = "mach an"; <- Variable passt nich zu text ;-)
...einschalten[] = "mach aus"; <- Variable passt nich zu text ;-)

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.