Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [c] problem ich komm nicht drauf

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496

    [c] problem ich komm nicht drauf

    habe folgende funktion:
    Code:
    struct ptab *searchcmd(char *cmd)
    {
    	struct ptab *wrk;
    	char *conv;
    	int cnt;
    	char test;
    	conv=cmd;
    	printf("\nNAECHSTE ZEILE MACHT ALLES KAPUTT!\n");
    	printf("'");
    	for (cnt=0;cnt<strlen(cmd);cnt++)
    	{
    	    printf("%c",*conv); // output: r
    	    #ifdef __unix__
               *conv = toupper(*conv);
            #elif __WIN32__ || _MSC_VER
               *conv = toupper(*conv);  // SEGFAULT
               printf("%c",*conv);  // output theoretisch: R
            #endif
    		conv++;
    	}
    	printf("'");
    	wrk=pcodes;
    	while (*(wrk->command)!= '\0')
    	{
    		if ((strcmp(wrk->command,cmd))==0)
    		{
    			return(wrk);
    		}
    		cnt++;
    		wrk++;
    	}
    	return(NULL);
    }
    diese wird wie folgt aufgerufen:
    Code:
    searchcmd("reset");
    in der funktion habe ich einen pointer fett markiert.

    wenn ich das programm starte läuft es bis zu dieser fettmarkierten stelle, wo ich dann einen segmentation fault bekomme, weil der versucht etwas da in den pointer zu schreiben... wenn ich da eine testvariable vom typ int davor tu bekomm ich keinen segfault.

    kann mir einer da vielleicht einen tip geben??

    wäre relativ wichtig...
    danke schonmal!

    greetz

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Die Zeichenkette "reset" liegt in einem Readonly-Speicherbereich.
    Innerhalb deiner Schleife schreibst du aber (über den Pointer conv) in diesen Speicher, und das verursacht den SegFault.

    Entweder du änderst deine Funktion ab, oder du mußt deiner Funktion die Zeichenkette anders übergeben.
    Code:
    ...
    char str[] ="reset";
    searchcmd(str);

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    thx!
    ich habe mir des scho gedacht, und hatte des auch scho ausprobiert, aba da gings dann trotzdem nicht... komisch... bei deiner lösung läuft des jetzt!

    greetz

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •