Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus

maximum7

Newbie
Registriert
Nov. 2014
Beiträge
5
Hallo zusammen.

Ich bin absoluter Programmieranfänger (habe mit C angefangen) und habe mal zur Übung versucht, die strcmp Funktion selbst zu schreiben, siehe angehängten Code.
Allerdings bekomme ich, wenn ich den Code ausführe, immer dasselbe Ergebnis , sprich es wird immer die 1 ausgegeben und ich verstehe nicht warum...
Ich weiß, der Code ist extrem einfach geschrieben, aber ich wunder mich, warum es so nicht funktionieren sollte?!

Ich wäre wirklich sehr dankbar, wenn mir jemand verraten könnte, wo der Fehler liegt, denn ich sitze mittlerweile schon längere Zeit vor'm PC, ohne eine plausible Lösung gefunden zu haben...

LG Maximum7



Code:
#include <stdio.h>
#include <stdlib.h>

int my_strcmp (char str1[1024], char str2[1024])
{
	int x;
	if (str1[1024] == str2[1024])
		{
 		x=0;
 		}
		else
		{  	
		x=1;
		}
	return x;
}

main()
{
	int x;
	char str1[1024];
	char str2[1024];
	printf("Enter str1: ");
	scanf("%s", &str1);
	printf("Enter str2: ");
	scanf("%s", &str2);
	x = my_strcmp(str1,str2);
	return (x);
}
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

Erstens vergleichst Du das Element mit dem Index 1024, und zweitens ist dieses nicht definiert, da der String 1024 Zeichen lang ist, und damit nur Zeichen von Index 0 bis 1023 existieren.
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

Ich meine auch, dass das so nicht geht. Du müsstest mit einer Iteration Zeichen für Zeichen durchgehen und vergleichen.
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

Danke für deine schnelle Antwort!

Ich denke, ich verstehe, was du meinst. Aber wie löse ich das Problem nun?
Wenn ich nur if (str1 == str2) schreibe, gibt er mir dennoch immer nur 1 aus...
Ich weiß, die Frage ist unglaublich dämlich, aber ich komme bisher beim Programmieren wirklich nicht gut zurecht, ich muss noch vieles lernen...

Könntest du mir zeigen, wie ich's richtig schreiben müsste? Wäre echt super nett! :)

PS: Ich habe im Internet schon eine Funktion gefunden, da wurde mit zwei for-Schleifen gearbeitet, um zuerst die Länge der Strings zu bestimmen, bevor praktisch genau dieselbe if-Funktion (nur abhängig von der Stringlänge) verwendet wurde, um die Strings auf Gleichheit zu überprüfen..
Es müsste doch auch ohne for-Schleifen gehen oder nicht??


EDIT

@Mr.Brown:
Geht das wirklich nicht, ohne Zeichen per Zeichen zu vergleichen?
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

Du solltest Dir zunächst ansehen, wie eine Zeichenkette (String) grundsätzlich aufgebaut ist. Mit einer Schleife allein ist das nicht getan, die Zeichenketten müssen ja nicht gleich lang sein, und schon gar nicht aus 1024 Zeichen bestehen. Da fehlt also noch fast alles was es für einen Vergleich von Zeichenketten braucht.

#Edith meint, dass der TE das Thema "Arrays" und "Zeichenketten" nebst "Schleifen" einmal ansehen sollte. Eine fertige Lösung abtippen ist ja langweilig - und man lernt wenig dabei.
 
Zuletzt bearbeitet:
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

Ja, bei mir hapert's selbst bei den Grundlagen schon, ich weiß... Aber ich finde leider so wenig Zeit, mich gründlich in das Thema einzuarbeiten, das ist echt frustrierend..
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

In Zeile 7 (nicht 27, sry) überprüft dein Programm, ob str1[1024] und str2[1024] die selbe Zahl beinhaltet. Deine Arrays haben aber gar kein solches Element! Es wird also zufällig aus dem RAM gelesen, und das ist selten der gleich Wert.

Zuerst würde ich aber eine Abfrage an den Anfang des Programms setzen, wie lang die Strings sein sollen, denn das sollte nicht auf 1024 Zeichen festgesetzt sein. Dann kannst du in deiner strcmp-Funktion überprüfen, ob die Strings gleich lang sind und mit einer for-Schleife Zeichen für Zeichen vergleichen. Geht leider nicht anders, was schreckt dich denn davon ab?

Und btw: Mit welchem Buch / welchem Tutorial lernst du C?
 
Zuletzt bearbeitet: (Korrektur von Unsinn)
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

Ich glaub ich hab's verstanden. So wie ich's geschrieben habe, würde er (nur von der Grundidee her) die Strings auf dieselbe Größe vergleichen, aber das kann so ja anscheinend nicht funktionieren, weil die beiden Strings nicht auf denselben Speicherbereich verweisen...
Ich hoffe, dass ich jetzt keinen Bockmist geschrieben habe.

Dann werde ich wohl ohne die Schleifen zum Vergleich der Zeichen nicht ans Ziel gelangen... Alternativ müssten while statt for Schleifen auch funktionieren, oder?

Danke für eure Hilfe!
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

maximum7 schrieb:
Ich glaub ich hab's verstanden. So wie ich's geschrieben habe, würde er (nur von der Grundidee her) die Strings auf dieselbe Größe vergleichen, aber das kann so ja anscheinend nicht funktionieren, weil die beiden Strings nicht auf denselben Speicherbereich verweisen...

Fast richtig, du überprüfst nur nicht, ob die Strings dieselbe Größe haben, sondern überprüfst, ob an der Stelle 1024 deine beiden Strings gleich sind. Die Stelle gibt es aber nicht!

Natürlich kann man auch while- statt for-Schleifen verwenden. Allerdings würde ich das vermeiden, denn obwohl for-Schleifen am Anfang etwas kompliziert erscheinen, verbessern sie die Lesbarkeit erheblich, wenn man sich ein bisschen in die Programmierung eingearbeitet hat.
 
Zuletzt bearbeitet: (Nochmal Korrektur von Unsinn)
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

Wir haben eine Informatikvorlesung in der Uni, aber aus der werde ich um ehrlich zu sein nicht ganz schlau, zwar verstehe ich schon einiges, aber wenn's dann um die Umsetzung geht, scheitere ich auf ganzer Linie.
Ein Buch würde ich mir gerne kaufen, allerdings gibt es so viele unterschiedliche und wirft man einen Blick auf die Rezensionen, so weiß man als Anfänger nicht, zu welchem Werk man denn nun greifen soll... Kannst du mir ein Buch empfehlen, welches wirklich von Anfang an idiotensicher C erklärt?

EDIT

Ah, ok, danke für deine Erklärung :)
 
Wo werden denn hier Adressen verglichen?

In Zeile 27 übergibt er doch bloß die beiden Variable.
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

maximum7 schrieb:
Geht das wirklich nicht, ohne Zeichen per Zeichen zu vergleichen?
So. Jetzt schaltest du mal deinen Computer aus und setzt dich mit Papier und Bleistift an das Problem. Computer & Programmiersprachen lenken dich nur vom Wesentlichen ab: Dem Algorithmus.

Überleg dir doch mal folgendes: Was sorgt dafür, dass 2 Strings (Zeichenketten) gleich sind? Wie würdest du als Mensch 2 beliebig lange Textfragmente auf Gleichheit überprüfen?
Wenn du die Antwort auf diese Frage hast, dann hast du auch den Algorithmus, den du jetzt nur noch in Code gießen musst.

maximum7 schrieb:
Ich glaub ich hab's verstanden. So wie ich's geschrieben habe, würde er (nur von der Grundidee her) die Strings auf dieselbe Größe vergleichen, aber das kann so ja anscheinend nicht funktionieren, weil die beiden Strings nicht auf denselben Speicherbereich verweisen...
Das eine hat mit dem anderen nichts zu tun.
Das, was du geschrieben hast, vergleicht einfach totalen Daten-Mumpitz. Deine Arrays haben kein Element 1024... Du vergleichst Quatsch mit Mumpitz.

Dann werde ich wohl ohne die Schleifen zum Vergleich der Zeichen nicht ans Ziel gelangen... Alternativ müssten while statt for Schleifen auch funktionieren, oder?
Du kannst ALLES sowohl als While, Do While oder For ausdrücken, genauso wie du es mit If in Verbindung mit Rekursion ausdrücken kannst.

Das heißt aber nicht, dass du es MUSST oder SOLLTEST. Du SOLLTEST das richtige Werkzeug für den Job verwenden, und ne saubere For-Schleife vereinfacht die Struktur ungemein.
 
AW: Selbstgeschriebene strcmp-Funktion gibt falsches Ergebnis aus :(

maximum7 schrieb:
Kannst du mir ein Buch empfehlen, welches wirklich von Anfang an idiotensicher C erklärt?

Ich hab mir C als meine erste Programmiersprache so angeeignet:
Zuerst habe ich das Buch "C Programmierung" von Jürgen Wolf durchgearbeitet (der Autor ist umstritten, aber bei mir hats geholfen). Das Buch bietet einen flachen Einstieg und hält einen bei der Sache, ohne einen sofort zu erschlagen mit Informationen.
Danach habe ich das Buch "The C Programming Language" von den C-Erfindern Kernighan und Ritchie auf Englisch durchgearbeitet. Da lernt man dann viele Aspekte von C, aber auch viel darüber, wie ein Computer intern funktioniert, das hat mir sehr viel geholfen und das ist auch auf andere Programmiersprachen übertragbar. Das Buch ist nicht einfach und sehr ausführlich, deshalb auch nicht für blutige Anfänger geeignet.
Zumindest mir hat diese Kombination sehr geholfen, danach auch andere Programmiersprachen zu lernen.

Nichts destotrotz sollte man sich Zeit und Geduld nehmen, wenn man ernsthaft etwas lernen will.
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben