Einzelne Zeichen in einem String überprüfen.

Gast #1103201
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
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
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 #1103252
Wobei man noch sagen sollte, dass er die von Mike gepostete Lösung nicht
einfach nur nehmen 'kann', sondern er sie nehmen muss.

Es könnte auch mit

strncmp ( Buffer[0], "a", 1)

gehen.
#1103264
Peter wrote:

> strncmp ( Buffer[0], "a", 1)

Nein, könnte es nicht.
Buffer[0] ist ein char und kein Zeiger auf das erste Zeichen.

   strncmp( &Buffer[0], "a", 1 )
   strncmp( Buffer, "a", 1 )

würde gehen, ist aber mit Kanonen auf Spatzen ...
Gast #1103265
@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
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

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