strcmp immer falsch

Gast #4626833
Lesenswert?

Hallo,
ich habe zwei arrays, die ich gerne miteinander vergleichen möchte.
unsigned char password[4] = {'1', '2', '3', '4'};
unsigned char pasword_input[4] = {0};

im code lasse ich password_input beschreiben und sobald dieser voll ist 
vergleiche ich das mit password.
password_input wird ebenfalls mit '1', '2', '3', '4' beschrieben.
dann vergleiche ich die beiden mit
1
if(strcmp(password, password_input) == 0){
2
  uart_print("passwort ist korrekt");
3
}
4
else{
5
  uart_print("passwort ist nicht korrekt");
6
  for(k=0; k<=3; k++){
7
    uart_char_transmit(password[k]);
8
  }
9
  for(k=0; k<=3; k++){
10
    uart_char_transmit(password_input[k]);
11
  }
12
}

Wenn es also falsch ist, lasse ich mir beide Passwörter ausgeben. Diese 
gucke ich mir in HTerm an. Dabei sind beides ASCII und werden mir 
identisch angezeigt.

Wie bekomme ich es hin, dass mir strcmp eine 0 gibt? Also die beiden 
arrays gleich?
Gast #4626836
Lesenswert?

Vergessen, beim Kompilieren bekomme ich übrigendes immer die 
Fehlermeldungen

pointer targets in passing argument 1 of 'strcmp' differ in signedness 
[-Wpointer-sign]
pointer targets in passing argument 2 of 'strcmp' differ in signedness 
[-Wpointer-sign]

doch leider kann ich damit nichts anfangen (obwohl darin wahrscheinlich 
die lösung liegt)
#4626854
Lesenswert?

Benny schrieb:
> Vergessen, beim Kompilieren bekomme ich übrigendes immer die
> Fehlermeldungen
>
> pointer targets in passing argument 1 of 'strcmp' differ in signedness
> [-Wpointer-sign]
> pointer targets in passing argument 2 of 'strcmp' differ in signedness
> [-Wpointer-sign]

Google bemühen. Der Compiler sagt dir hier, dass strcmp ein Array aus 
dem Typ char erwartet er aber ein Array aus unsigned char bekommen hat.
Gast #4626866
Lesenswert?

Sina A. schrieb:
> klausr schrieb:
>> Sina A. schrieb:
>>> char pasword_input[5] = {0};
>>
>> Hm. Das stimmt nicht: char password_input[4] = {0}, da ja C ab 0 zählt.
>
> da wird ein array mit fünf chars definiert und alle einträge auf 0
> initialisiert
>
> lg

Du hast wohl zu tief in Glas geschaut. Da wird natürlich ein Array mit 
vier (4) chars definiert und je mit 0 belegt. Der Index fürs Array 
läuft von 0 ... 3 (=4 Elemente).
Gast #4628548
Lesenswert?

Hans-Georg L. schrieb:
> Alternativ hättest du in deinem Originalcode
>
> if(strncmp(password, password_input, 4) == 0)
>
> schreiben können.

Und wie stellst du dir sowas praktisch vor? Im allgemeinen ist die 
Passwortlänge schon seit 30 Jahren nicht mehr festgelegt.

Was soll der Unfug einem Anfaänger einen unsinnigen Trick zu zeigen 
statt der korrekten Lösung?

@Benny: Maximal die ersten 2 Kapitel eines C Buchs hätten genügt deinen 
Fehler selbst zu finden.
#4630454
Lesenswert?

Der Andere schrieb:
> Hans-Georg L. schrieb:
>> Alternativ hättest du in deinem Originalcode
>>
>> if(strncmp(password, password_input, 4) == 0)
>>
>> schreiben können.
>
> Und wie stellst du dir sowas praktisch vor? Im allgemeinen ist die
> Passwortlänge schon seit 30 Jahren nicht mehr festgelegt.
>

Der TO hat exakt 4 chars in seinem Code vergleichen wollen uns die
strnxxx Funktionen sind in C kein Trick sondern haben schon ihren Sinn.
Moderator Persönliche Seite #4630716
Lesenswert?

Joachim B. schrieb:
> Hans-Georg L. schrieb:
>> Der TO hat exakt 4 chars in seinem Code vergleichen wollen uns die
>> strnxxx Funktionen sind in C kein Trick sondern haben schon ihren Sinn.
>
> genau wie memcmp, aber egal

strncmp() und memcmp() kannst Du nicht allgemein als äquivalent ansehen:
1
char buf1[4] = { 'A', 'B', '\0', 'C' };
2
char buf2[4] = { 'A', 'B', '\0', 'D' };

strncmp (buf1, buf2, 4) liefert 0 zurück, memcmp (buf1, buf2, 4) jedoch 
-1. Beide Funktionen haben schon ihre Berechtigungen. In diesem 
konkreten Fall (Vergleich einer exakt vierstelligen Pin) passt es aber. 
Ja, memcmp() wäre hier sogar sinnvoller, wenn nicht nur druckbare 
Zeichen als Pin erlaubt sind.
#4630717
Lesenswert?

Frank M. schrieb:
> Beide Funktionen haben schon ihre Berechtigungen. In diesem
> konkreten Fall (Vergleich einer exakt vierstelligen Pin) passt es aber.

und geht es nicht genau darum? um diesen konkreten Fall?
nur memcmp kann genau 4 Bytes egal mit was gefüllt vergleichen, strncmp 
kann es nicht!

ich weiss nicht wer mich so abgrund tief hasst das ich bei derlei 
Postings immer "nicht lesenswert bekomme"

Beitrag "Re: strcmp immer falsch"

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