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.


Anmelden zum Antworten