Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

lexikalischer Vergleich

Empfohlene Antworten

Veröffentlicht

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

Könnte mir bitte jemand sagen was dieser Fehler bedeutet
strcmp 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.

Also würde:

char Bedingung1[4];

char Bedingung2[3];

if(((strcmp(Bedingung1,"Wort"))==0)&&((strcmp(Bedi ngung2,"Tat"))==0)){

...

}

funktionieren?

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?

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.

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:

Danke, habs getestet und funktioniert!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.