String an der Stelle n Tauschen



  • Hallo,

    ich experimentiere gerade an Strings rum und versuche an einer bestimmten Stelle n den String zu Tauschen. Der Programmablauf ist wie folgt aufgebaut.

    Zuerst wird eine Zahl vom User eingelesen z.B.: die 3, welche angibt, an welcher Stelle der String

    --> ich_habe_etwas\0

    getauscht wird.

    Dann wird von der Zahl aus, der Rechte Teil

    --> habe_etwas

    nach vorne gesetzt und der linke Teil

    --> ich_

    wird an den rechten drann gehängt. So dass es zum Schluss so aussieht:

    --> habe_etwasich_\0

    Mein ansatz steht unten aber ich kriege immer "Segmentation Fault"
    Kann mir da einer Helfen?

    void ntausch(char text1[]){                             
    int i, i1, n;
    char *first, *last, *tausch;
    
    tausch=text1;
    first=text1;
    
    i=strlen(text1);    
    
    do {
       fflush(stdin);
       printf("An welcher Stelle soll getausch werden? von 0 bis max.%d\n",i);
       i1=scanf("%d",&n);;                                                       
       if (0==i1){                                                                                  
          printf("Ihre Eingabe liegt nicht im Stringbereich!\n");
          }            
          fflush(stdin);                  
       }                               
    while(0==i1); 
    
    last=strncpy(last,text1,n);    //
    first=strstr(tausch,last);     //Hier in diesen 4 Zeilen
    strcat(first,last);            //habe ich irgendwo den fehler
    printf("\n%s\n",first);        //
    }
    


  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void ntausch (char* text1)
    {                             
        int i, n; 
        char *first, *last; 
    
        first = text1; 
    
        i = strlen (text1);     
    
        do 
        { 
            fflush (stdin); 
            printf ("An welcher Stelle soll getausch werden? von 0 bis max.%d\n",i-1); 
            scanf ("%d",&n);;                                                       
            if (n >= i || n <= 0)
            {                                                                                   
                printf ("Ihre Eingabe liegt nicht im Stringbereich!\n"); 
                fflush (stdin);   
            }
            else
            {
                last = malloc (n+1);
                *(last+n) = 0;
            }
        }while (n >= i || n <= 0); 
    
        last = strncpy (last, text1, n);     
        first= strcpy (first, first+n);      
        strcpy (first+(i-n), last);   
        printf("\n%s\n", first);         
    } 
    
    int main()
    {
        char text1[] = "eine_moegliche_Loesung";
        ntausch (text1);
    }
    

    😉



  • balduin schrieb:

    fflush (stdin);
    

    Troll



  • free (last); vergessen



  • Dankeschön hat geklappt und hat mir sehr geholfen. 😃


Anmelden zum Antworten