Warum funktioniert dieser Code nicht?
-
Durch Eingabe eines Start und eines Endwertes, soll ein Teilstring vom ursprünglichen String ("Hello World, today is Wednesday!") ausgegeben werden. zb.: start = 1, ende = 6 --> Ausgabe: "ello W"
#include <stdio.h> #include <string.h> char* substr(char* string,int start, int ende, char* sub){ int i; for(i=start;i<=ende;i++){ sub[i] = string[i]; } return sub; } int main(){ int start; int ende; char* string[]={"Hello World, today is Wednesday!"}; char* sub[strlen(string)]; printf("Startwert eingeben: "); scanf("%i",&start); printf("\nEndwert eingeben: "); scanf("%i",&ende); getchar(); printf("%s",substr(string,start,ende,sub)); getchar(); return 0; }
-
Und was genau geht nicht? Was hast du denn selbst schon versucht um das Problem einzudämmen?
Und bist du dir bewusst darüber, dass dieser Code nur mit dem C99 Standard funktioniert? (Dieser wird von Visual Studio nicht unterstützt!)
-
JanJan schrieb:
Und was genau geht nicht? Was hast du denn selbst schon versucht um das Problem einzudämmen?
Und bist du dir bewusst darüber, dass dieser Code nur mit dem C99 Standard funktioniert? (Dieser wird von Visual Studio nicht unterstützt!)
Ich finde keinen Fehler, der Compiler auch nicht! Das Problem ist nur, dass der Teilstring nach Eingabe von Start und Endwert nicht ausgegeben wird.
Zum Compiler: Ich verwende den Dev-C++ 4.9.9.2, womöglich unterstütz dieser C99 noch nicht??
-
Ohne das jetzt getestet zu haben, nehme ich an, dass der Fehler hier liegt:
char* string[]={"Hello World, today is Wednesday!"}; char* sub[strlen(string)];
Da sind string und sub keine Strings, sondern Arrays von Strings. Das sollte wohl eigentlich etwa so aussehen:
char string[] = "Hello World, today is Wednesday!"; char sub[sizeof(string)];
-
Neuere MingW Versionen unterstützen C99 zum Teil. Die Arrays mit Variable Länger - wie du sie nutzt - werden unterstützt. Würden sie nicht unterstützt werden, so würde das Programm nicht kompilieren.
Apropo Kompilieren - Es wundert mich das keine Warnung aussgegeben wird. Oder gab es Warnungen, die du uns hier verschwiegen hast?
Deine Funktion substr erwartet als erstes Argument einen Char-Pointer. Du übergibst aber einen Char-Pointer-Pointer (char**).
Zeile 18 macht so keinen Sinn. Du speicherst ein Array von Char-Zeigern. Du willst aber nur einen Char-Zeiger, nämlich deine Zeichenkette.
char *string= "Hello World, today is Wednesday!";
-
for(i=0;i<=(ende-start);i++){ sub[i] = string[start+i]; }
-
@Janjan: nein es gab davor auch keine Fehlermeldung
So funktioniert es jetzt halbwegs:
Der Teilstring wird ausgegeben, jedoch stehen davor und danach irgendwelche komischen Symbole!?#include <stdio.h> #include <string.h> char* substr(char* string,int start, int ende, char* sub){ int i; for(i=start;i<=ende;i++){ sub[i] = string[i]; } return sub; } int main(){ int start; int ende; char string[]= {"Hello World, today is Wednesday!"}; char sub[sizeof(string)]; printf("Startwert eingeben: "); scanf("%i",&start); printf("\nEndwert eingeben: "); scanf("%i",&ende); getchar(); printf("\n"); printf("%s",substr(string,start,ende,sub)); getchar(); return 0; }
-
Selber Fehler wie vorher, obwohl zwei Personen dich darauf aufmerksam gemacht haben.
-
jimmy086 schrieb:
Der Teilstring wird ausgegeben, jedoch stehen davor und danach irgendwelche komischen Symbole!?
Du schreibst ja auch mitten in das sub-Array rein, weil du denselben Index für sub und string benutzt. Weder fängst du vorne an, noch setzt du eine Ende-Markierung.
-
Janjan schrieb:
Neuere MingW Versionen unterstützen C99 zum Teil. Die Arrays mit Variable Länger - wie du sie nutzt - werden unterstützt. Würden sie nicht unterstützt werden, so würde das Programm nicht kompilieren.
Apropo Kompilieren - Es wundert mich das keine Warnung aussgegeben wird. Oder gab es Warnungen, die du uns hier verschwiegen hast?
Deine Funktion substr erwartet als erstes Argument einen Char-Pointer. Du übergibst aber einen Char-Pointer-Pointer (char**).
Zeile 18 macht so keinen Sinn. Du speicherst ein Array von Char-Zeigern. Du willst aber nur einen Char-Zeiger, nämlich deine Zeichenkette.
char *string= "Hello World, today is Wednesday!";
char *string= "Hello World, today is Wednesday!" --> so funktioniert es aber auch nicht!
-
MFK schrieb:
jimmy086 schrieb:
Der Teilstring wird ausgegeben, jedoch stehen davor und danach irgendwelche komischen Symbole!?
Du schreibst ja auch mitten in das sub-Array rein, weil du denselben Index für sub und string benutzt. Weder fängst du vorne an, noch setzt du eine Ende-Markierung.
???? welcher Index?
meinst du: sub[i] = string[i] ?? --> das bedeutet doch nur, dass im Array 'sub' an der Stelle i jener Wert hingeschrieben wird, welcher beim Array 'string' an der Stelle i steht!
-
jimmy086 schrieb:
das bedeutet doch nur, dass im Array 'sub' an der Stelle i jener Wert hingeschrieben wird, welcher beim Array 'string' an der Stelle i steht!
Eben. Du fängst an Stelle i an, in sub reinzuschreiben. Und was meinst du, an welcher Stelle fängt prinft an, sub auszugeben?
Wenn vor Stelle i irgendein Mist in sub steht, wird printf auch irgendeinen Mist ausgeben. Und wie gesagt, die Endmarkierung fehlt auch. Darum "weiß" printf nicht, wann es beim Ausgeben von sub aufhören soll.
-
Und vergiss auch nicht, am Ende '\0' in den char* reinzuschreiben.