Problem mit einem String-Programm



  • Ja was Shinja gesagt hat ist richtig, also das ist der Sinner des Programms.
    Ihr habt auch fur Folgendes, die Kode ist nicht C++ sondern genau C, aber ich dachte hier kann ich es auch posten.

    Und irgendwelche Ideen ?



  • Perffy schrieb:

    Ihr habt auch fur Folgendes, die Kode ist nicht C++ sondern genau C, aber ich dachte hier kann ich es auch posten.

    Ja, hier gibt es auch eine Abteilung für C, aber die ist eine Etage höher (das Board "Ansi C") - wart' einfach mal, bis dich ein Mod rüberschiebt.

    Ansonsten: Was genau bedeutet "funktioniert nicht"? Lässt sich das Programm compilieren? Was für Werte liefert es?

    Mir fallen auf Anhieb zwei mögliche Fehler auf:
    Erstens könnte es sein, daß du zu viel Speicher anlegst (überdenk' nochmal deine Längenberechnung) und kopierst. Das solltest du mal von Hand (oder im Debugger) durchrechnen.
    Und zweitens initialisiert realloc() den zurückgegebenen Speicher nicht - das heißt, du hast irgendwelche Müll-Daten übergeben bekommen und strcat() fängt an der ersten 0 an, deinen String einzutragen (der Müll bleibt am Anfang stehen).

    Für das erste müsste ich deine Funktion im Detail verstehen, für das zweite Problem mußt du deinen Ausgabe-Speicher korrekt initialisieren:

    char *ptr,
         *output = calloc(1,1),
         *str;
    ...
    

    (PS: Und außerdem solltest du die angelegten Speicherblöcke auch wieder freigeben)



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das Programm lasst sich kompilieren, aber leider funktioniert wie es soll.

    Ich sollte auch fur die Fehlerbehandlung keine Debugger benutzen erst, weil ich weiss noch nicht und zweitens darf ich nicht.



  • Perffy schrieb:

    Das Programm lasst sich kompilieren, aber leider funktioniert wie es soll.

    Ich sollte auch fur die Fehlerbehandlung keine Debugger benutzen erst, weil ich weiss noch nicht und zweitens darf ich nicht.

    Kannst du diesen Beitrag mal bitte in verständlichem Deutsch formulieren (oder darfst du Duden auch nicht 😃 *scnr*)? Ich bin zwar in der Lage, gewisse grammatikalische Unzulänglichkeiten zu überlesen, aber irgendwo ist dann doch Schluß.



  • Ops sorry

    als ich jetzt meinen Beitrag gelesen habe ... und ja ist total falsch 😕

    Also:

    Das Programm kann ich schon kompilieren, aber leider funktioniert nicht wie es soll.
    Z.b: Bei einem Aufruf

    ./prog message age ed
    Segmentation Fault (core dumped)

    Und zu dem Debugger, ich hab noch nie einen benutzt und auch mit ist es gesagt das Programm ohne Debugger zu schreiben.



  • Hast du mal versucht, den calloc()-Aufruf von oben mit reinzubauen?

    (ansonsten ist es immer von Vorteil, sich den Programmablauf im Debugger anzusehen - wenn alles nichts hilft, kannst du immer noch Hardcore-Debugging anwenden (indem du an wichtigen Stellen Kontrollmeldungen an stderr schreibst))



  • ich hab statt *output=0

    das
    *output=calloc(1,1)

    geschrieben, aber immer noch geht nicht. Mit dem Beispiel bekomme ich das von fruher:
    Segmentation Fault (core dumped)



  • Vllt. hilft dir ja das:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char * replaceSubstring(char *str, char *substring, char *newsubstring) {
    	char *result = strstr(str, substring);
    	if (result == 0)
    		return 0;
    
    	size_t len = strlen(str)-strlen(substring)+strlen(newsubstring)+1;
    	char *output = calloc(len, sizeof(char));
    
    	strncpy(output, str, result-str);
    	strncat(output, newsubstring, strlen(newsubstring));
    	strcat(output, result+(strlen(substring)));
    
    	return output;
    }
    
    int main(int argc, char **argv) {
    	if (argc < 4) {
    		perror("Prick!!");
    		return -1;
    	}
    
    	char *out = replaceSubstring(argv[1], argv[2], argv[3]);
    	printf("%s\n", out);
    	free(out);
    	return 0;	
    }
    


  • Danke dir, die Funktion macht das was ich brauche. leider ich muss die Funktion, die ich eingegeben habe "reparieren". Die hat Fehler, die ich beseitigen muss, leider weiss ich nicht wie.
    ich hab verstanden, dass es Probleme auf folgenden Zeilennummer vorhanden sind:

    9, 18, 21

    kann jemand mir helfen

    oder mir sagen wie kann ich mit dem Debugger unter Linux arbeiten.
    Ich hab probiert auf jeder Zeile einen Breakpoint zu setzen und dann mit step zu schauen was es kommt, aber irgendwie geht nicht 😢


Anmelden zum Antworten