Metalmind Geschrieben 8. Juni 2010 Teilen Geschrieben 8. Juni 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Juni 2010 Teilen Geschrieben 8. Juni 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Metalmind Geschrieben 8. Juni 2010 Autor Teilen Geschrieben 8. Juni 2010 Also würde: char Bedingung1[4]; char Bedingung2[3]; if(((strcmp(Bedingung1,"Wort"))==0)&&((strcmp(Bedi ngung2,"Tat"))==0)){ ... } funktionieren? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Metalmind Geschrieben 8. Juni 2010 Autor Teilen Geschrieben 8. Juni 2010 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Juni 2010 Teilen Geschrieben 8. Juni 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Metalmind Geschrieben 8. Juni 2010 Autor Teilen Geschrieben 8. Juni 2010 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: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Juni 2010 Teilen Geschrieben 8. Juni 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Metalmind Geschrieben 8. Juni 2010 Autor Teilen Geschrieben 8. Juni 2010 Danke, habs getestet und funktioniert! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.