Einzelne Zeichen in einem String überprüfen.

Gast #1103201
Lesenswert?

Hi
Ich habe da ein kleines Problem und zwar will ich in einem String das 
erste Zeichen überprüfen.
1
if ( strcmp ( Buffer[0], 'a' ) == 0 )
2
{
3
uart_puts ( "richtig" );
4
uart_putc( '\r' );
5
}
6
else
7
{
8
uart_puts ( "falsch" );
9
uart_putc( '\r' );
10
}
So habe ich das gelöst. Es funktioniert auch soweit, nur wenn ich das 
ganze Kompiliere kommen zwei Warnungen in der Zeile
1
if ( strcmp ( Buffer[0], 'a' ) == 0 )

../main.c:28: warning: passing argument 1 of 'strcmp' makes pointer from 
integer without a cast
../main.c:28: warning: passing argument 2 of 'strcmp' makes pointer from 
integer without a cast

Gibt es da vielleicht eine bessere Lösung um zu überprüfen ob das erste 
Zeichen z.B. ein „a“ ist?

Das ganze läuft auf einem Atmega32.
Ich hoffe der Programmschnipsel reicht, ansonsten liefere ich noch mehr 
;-)

Gruß Simon
#1103208
Lesenswert?

Moin,

Statt
1
if ( strcmp ( Buffer[0], 'a' ) == 0 )

kannst du auch einfach
1
if ( Buffer[0] == 'a' )

schreiben.

Ansontens passen deine beiden Parameter nicht zum Funktionsaufruf von 
strcmp bzw. es wird ein automatischer Typecast durchgeführt und der kann 
auch ungewollte ergebnisse bringen, deshalb wird er vom Compiler 
markiert.
#1103237
Lesenswert?

Peter wrote:
>>....odda lige ich da auch verkehrt?
> JA
>
> Mike S. hat schon die Lösung gefunden.

Wobei man noch sagen sollte, dass er die von Mike gepostete Lösung nicht 
einfach nur nehmen 'kann', sondern er sie nehmen muss. Das ist ein 
Unterschied. Wenn der OP meint

<Zitat>
So habe ich das gelöst. Es funktioniert auch soweit,
</Zitat>

dann hat er einfach nur nicht genau genug getestet, denn seine Lösung 
funktioniert definitiv nicht.
Gast #1103265
Lesenswert?

@Karl heinz Buchegger
Klar das es nicht richtig geht, deswegen habe ich mich ja an dieses 
Forum gewannt. Nachdem ich gepostet hatte habe ich noch ein wenig rum 
probiert. Und ich habe bei einer Weiterverarbeitung auch viel murks 
rausbekommen. Nur im ersten Moment hatte es halt funktioniert.
Aber mit der Lösung von Mike geht es super gut und Fehler bekomm ich 
auch keine mehr.
Danke noch mal für die Hilfe
#1103282
Lesenswert?

Simon wrote:

> Aber mit der Lösung von Mike geht es super gut und Fehler bekomm ich
> auch keine mehr.


Die eigentlich wichtige Frage ist aber eine andere:

Weisst du, warum deine Lösung nicht funktionieren kann bzw. warum du es 
anders machen musst? Bzw. in etwas weiter gefasster Form: Ist dir der 
Unterschied zwischen einem einzelnen Zeichen (einem char) und einer 
Zeichenkette (einer Abfolge von einzelnen char) klar.

Alle str... Funktionen arbeiten immer auf Zeichenketten (vulgo Strings).
In C ist etwas was in einfache Gänsefüsschen eingeschlossen ist (also 
'a') immer ein einzelnes Zeichen, während ein String immer in doppelte 
Gänsefüsschen eingeschlossen wird (also "test")

http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F

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