kunert0345
Goto Top

Absturz bei "strcat"

Seit dem ich die Codezeile "strcat( string1, tmp1);" in meinem Queltext habe stürzt das Programm immer ab.
Hat einer eine Idee warum das so ist?
Bin schon langsam am verzweifeln face-confused

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void) {

    FILE *fp;
    char tmp1;
    char switch1 = '0';  
    char string1[255];

    fp = fopen ("config.conf", "r");  

    if(fp == NULL) {
        puts("ERROR: Konfiguration konnte nicht eingelesen werden, ueberpruefen Sie die config.conf Datei");  
        return 1;
    }
    else {
        //List Buchstabenweise die config datei
        while((tmp1 = fgetc(fp)) !=EOF) {
            //Die Leerzeichen löschung wird mit " an oder abgeschaltet 
            if('"' == tmp1) {  
                if(switch1 == '0'){  
                    switch1 = '1';  
                }
                else {
                    switch1 = '0';  
                }
            }
            //Leerzeichen löschung auser wenn " switch1 an ist und " zeichen löschen 
            if (!((tmp1==' ' || tmp1=='\t') && (switch1=='0') || (tmp1=='"'))){  
                printf("%c", tmp1);  

                //variablen name einlesen

                strcat( string1, tmp1);
            }
        }
        printf("\n%s", string1);  

        fclose (fp);
        return 0;
    }
}

Content-ID: 278776

Url: https://administrator.de/contentid/278776

Ausgedruckt am: 08.11.2024 um 19:11 Uhr

Lochkartenstanzer
Lösung Lochkartenstanzer 30.07.2015 aktualisiert um 16:10:53 Uhr
Goto Top
Moin

strcat erwartet pointer auf Null-terminierte Strings. Dein tmp1 ist aber nur ein char..

das sind so die typischen fehler, um erfolgreich exploits anzubringen. face-smile

Also öfter mal in des Reference-manual schauen.

lks
kunert0345
kunert0345 30.07.2015 um 16:12:37 Uhr
Goto Top
Ah verstehe, da kann er ja lange warten *~*

Hast Du eine Idee wie ich den char in den string schreiben kann?
Lochkartenstanzer
Lösung Lochkartenstanzer 30.07.2015 aktualisiert um 16:19:58 Uhr
Goto Top
Nachtrag:;

Bei stract solltest Du sicherstellen, daß dein Ziel-Array genug platz hat. Also vorher die strinlänge im Ziel und an der quelle überprüfen udn sofern dies mehr als die reservierte Arraylänge beträgt vom aufruf von strcat absehen!

lks
Lochkartenstanzer
Lösung Lochkartenstanzer 30.07.2015 aktualisiert um 16:19:57 Uhr
Goto Top
Zitat von @kunert0345:

Ah verstehe, da kann er ja lange warten *~*

Hast Du eine Idee wie ich den char in den string schreiben kann?

Länge des Strings in string1 feststellen, string1[länge] dann auf den char setzen und dann noch eine null in länge+1 schreiben. Alelrdings soltlest Du sicherstellen, daß Du nicht üebr die Array-grenzen hinausschreibst.

lks
kunert0345
kunert0345 30.07.2015 um 16:19:47 Uhr
Goto Top
DANKE!!! face-smile)