Funzione Reverse in C

di il
1 risposte

Funzione Reverse in C

Ciao a tutti, sono alle prime armi col C

stavo provando i puntatori, ma il programma smette di funzionare se utilizzo char* s; invece di char s[] (eliminando l'istruzione malloc)

quale potrebbe essere il problema??

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

char* reverse (char *s) {
    char *p=NULL;
    char *q=NULL;
    int n=strlen(s);
    printf("%d\n",n);   // mi da sempre 3 utilizzando il puntatore char* s nel main
    char temp;
    q=s+n-1;
    for (p=s;q>p;p++,q--) {
    temp=*p;
    *p=*q;
    *q=temp;
    }
    return s;
}


int main () {
char* s="roma";
s=malloc(sizeof(char)*4);
printf("%s",reverse(s));
return 0;
}

1 Risposte

  • Re: Funzione Reverse in C

    Ti illumino un po...
    dichiari un puntatore char ed assegni staticamente una buffer che ovviamente non protrai mai modificare. Allo stesso ptr (s) chiedi 4 chars di memorica dinamica ma devi considerare che le stringhe necessitano di un ulteriore char di spazio per il terminatore. Poi dovresti deallocare lo spazio con free prima di uscire. Il main dovrebbe essere cosi:
    
    int main () {
    char *s;
    s=malloc(sizeof(char)*(4+1));
    strcpy (s,"roma");
    printf("%s\n",reverse(s));
    free (s);
    return 0;
    }
    
    Poi nella funzione reverse mi sembra di vedere che vai a scrivere nella stessa zona di memoria.
    Bisogna fare attenzione, nell'incertezza potresti allocare uno spazio analogo e copiare il tuo buff rovesciato. Tipo:
    
    char *reverse (char *s)
    {
        int len=strlen(s);
        char *tmp,*p;
        
        tmp=malloc(len+1);
        tmp[len--]='\0';
        
        for (p=s;*p;p++,len--)
          *(tmp+len)=*p;
        
        strcpy (s,tmp); 
        free (tmp);
        
        return s;
    }
    
    Ora prova a compilare e segui con un debug eventuali errori che ho fatto.

    ~Max
Devi accedere o registrarti per scrivere nel forum
1 risposte