Vergleichen von Zeichenketten in C funktioniert nicht

OP #2609188
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
Gast #2609198
> 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
OP #2609212
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?
#2609216
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.
Gast #2609219
> 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.
(Firma: fritzler-avr.de) #2609237
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];
OP #2609245
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 ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.