Ciao a tutti/e,
da qualche settimana sto studiando il C e sono arrivato all'argomento puntatori. Ieri ho provato a svolgere un esercizio in cui inizializzo una stringa (str) tramite un puntatore a char e poi la passo ad una funzione (rovescia) che dovrebbe invertirla....invece il compilatore mi dice che c'è un problema di segmentation fault.
#include <stdio.h>
char *rovescia(char *p);
int main(){
char *str="ciao";
char str2[10]="ciaooo";
printf("%s\n", str);
//da errore di segmentation fault
printf("%s\n", rovescia(str));
//funziona
printf("%s\n", rovescia(str2));
getch();
return 0;
}
char *rovescia(char *p){
char *p1, *p2, c;
p1=p2=p;
//mi sposto fino alla fine della stringa
while(*p2)
p2++;
p2--;
//inverto i caratteri
while(p1<p2){
c=*p2;
*p2=*p1; //qui da un errore di segmentation fault
*p1=c;
p1++;
p2--;
}
return p;
}
Se invece passo una stringa (str2) creata nel modo più "classico" allora il programma funziona. Ho intuito che il problema riguarda il modo in cui è stata creata la stringa che passo alla funzione ma non riesco a capire il motovo preciso, qualcuno può spiegarmelo per favore??
Grazie