Warum funktioniert dieser Code 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.