Problem mit Zeiger(?)



  • hallo,

    ich habe versucht, meine eigene implementierung von rot13 zu schreiben.

    hier ist die funktion:

    char *rot13_string(char *string)
    {
    	int i;
    	char *string_2;
    	for(i=0;string[i]!='\0';i++)
    	{
    		if(string[i]>64&&string[i]<78)
            {
                string_2[i]=string[i]+13;
                continue;
            }
            if(string[i]>77&&string[i]<91)
            {
                string_2[i]=string[i]-13;
                continue;
            }
            if(string[i]>96&&string[i]<110)
            {
                string_2[i]=string[i]+13;
                continue;
            }
            if(string[i]>109&&string[i]<123)
            {
                string_2[i]=string[i]-13;
                continue;
            }
            else
            {
                string_2[i]=string[i];
                continue;
            }
    	}
    	string_2[i]='\0';
    	return string_2;
    }
    

    und das ist das hauptprogramm:

    #include <stdio.h>
    #include "rot13.h"
    
    int main()
    {
    	char *s1="test";
    	printf("test = %s\n",rot13_string(s1));
    	return 0;
    }
    

    kompilieren lässt sich das ganze problemlos (keine fehlermeldungen), aber wenn ich dann das program ausführe, kommt die meldung "Segmentation fault (core dumped)" (ich benutze gcc).

    ich weiß allderdings nicht, was genau das problem ist. könntet ihr mir das sagen?



  • Ja, du greifst schreibend auf undefinierten Speicher zu und zwar bei string_2.

    http://ideone.com/EBjOu

    Und wenn du weißt, warum ich hier *s1 durch s1[] ersetzt habe, hast du schon was Grundlegendes von C begriffen.



  • Wo zeigt denn string_2 hin?
    Bzw. Wo bekommst du denn den Speicher für string_2 her?



  • danke für eure antworten.


Anmelden zum Antworten