Veröffentlicht 8. Juni 201015 j Moin, ich habe eine if Bedingung, in der ich 2 lexikalische Vergleiche durchführen möchte: char Bedingung1; char Bedingung2; if(((strcmp(Bedingung1,"Wort"))==0)&&((strcmp(Bedingung2,"Tat"))==0)){ ... } Nun bekomme ich bei diesem Vergleich den Fehler: warning: passing arg 1 of `strcmp' makes pointer from integer without a cast Könnte mir bitte jemand sagen was dieser Fehler bedeutet (und warum dort "warning" und nicht "error" steht wie normalerweise) und wie ich ihn lösen kann? Vielen Dank und Gruß Metalmind
8. Juni 201015 j Könnte mir bitte jemand sagen was dieser Fehler bedeutetstrcmp vergleicht zwei nullterminierte Zeichenketten, die als char-Zeiger übergeben werden. Bedingung1 und Bedingung2 sind aber keine Zeichenketten, sondern nur einzelne Zeichen. Und bevor du jetzt auf die Idee kommst, die Adresse deiner char-Variablen zu übergeben: Dann hast du immer noch keine Nullterminierung. Für Zeichenketten brauchst du char-Arrays. (und warum dort "warning" und nicht "error" steht wie normalerweise) und wie ich ihn lösen kann?Einen Fehler meldet der Compiler immer dann, wenn er etwas nicht übersetzen kann. Laut C-Standard sind Ganzzahldatentypen (denn ein solcher ist char) implizit in jeden Zeigertyp konvertierbar. Übersetzen ließe sich das also, aber dabei kommt praktisch nie etwas Sinnvolles heraus, daher tut dir der Compilerhersteller mit der Warnung einen Gefallen. Dieser Code wird dir nämlich mit an Sicherheit grenzender Wahrscheinlichkeit um die Ohren fliegen, weil bei dieser Konvertierung kein gültiger Zeiger herauskommt.
8. Juni 201015 j Also würde: char Bedingung1[4]; char Bedingung2[3]; if(((strcmp(Bedingung1,"Wort"))==0)&&((strcmp(Bedi ngung2,"Tat"))==0)){ ... } funktionieren?
8. Juni 201015 j Also würde: char Bedingung1[4]; char Bedingung2[3]; if(((strcmp(Bedingung1,"Wort"))==0)&&((strcmp(Bedi ngung2,"Tat"))==0)){ ... } funktionieren? strcmp vergleicht zwei nullterminierte Zeichenketten, die als char-Zeiger übergeben werden. Sehe ich das richtig dass ich keine Zeiger-Arrays erstellen muss, sondern diese vom Programm nur übergeben werden?
8. Juni 201015 j Also würde: char Bedingung1[4]; char Bedingung2[3]; if(((strcmp(Bedingung1,"Wort"))==0)&&((strcmp(Bedi ngung2,"Tat"))==0)){ ... } funktionieren?Grundsätzlich ja. Es sollte aber etwas in den Arrays drinstehen. So kann dabei nichts Sinnvolles herauskommen. Außerdem sind die Arrays für das, mit dem sie verglichen werden sollen, zu klein. Du brauchst immer ein Arrayelement mehr für das Nullbyte, das das Ende des Strings markiert. Sehe ich das richtig dass ich keine Zeiger-Arrays erstellen muss, sondern diese vom Programm nur übergeben werden?Kommt darauf an, was du womit vergleichen willst. Dem Programm werden nur die Kommandozeilenparameter übergeben, mit denen es aufgerufen wurde.
8. Juni 201015 j Meine Eingabe habe ich mir so gedacht: scanf("%s",&Bedingung1); scanf("%s",&Bedingung2); Ich würde gerne versuchen die Variablen vom Programm beschreiben zu lassen, im Sinne von: Bedingung1="Wort"; Gibt es dafür eine Möglichkeit? Die von mir genannte ist es wahrscheinlich nicht :hells:
8. Juni 201015 j Ich würde gerne versuchen die Variablen vom Programm beschreiben zu lassen, im Sinne von: Bedingung1="Wort";Das geht so nur bei der Initialisierung: char Bedingung1[5] = "Wort"; Zuweisen kann man Arrays nichts. Aber für Strings gibt's strcpy.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.