mastoo
04-08-2007, 13:36
Non riesco a capire perche il programma 1 funziona, mentre il programma 2 va in "Segmentation fault"
Programma 1
#include <stdio.h>
#include <string.h>
/*reverse() inverte una stringa*/
void reverse(char *s);
main()
{
char s[] = "stringa di prova";
printf("%s\n",s);
printf("%s\n",(reverse(s),s));
}
void reverse(char *s)
{
char *p ;
char c ;
for(p = s + strlen(s)-1; s < p; s++,p--)
c = *s, *s = *p, *p = c;
}
programma 2
#include <stdio.h>
#include <string.h>
/*reverse() inverte una stringa*/
void reverse(char *s);
main()
{
char *s = "stringa di prova";
printf("%s\n",s);
printf("%s\n",(reverse(s),s));
}
void reverse(char *s)
{
char *p ;
char c ;
for(p = s + strlen(s)-1; s < p; s++,p--)
c = *s, *s = *p, *p = c;
}
in teoria sia s[] che *s dovrebbero puntare ad un area di memoria inizializzata... :mbe: o no?
uso il compilatore gcc 4.1.2
Programma 1
#include <stdio.h>
#include <string.h>
/*reverse() inverte una stringa*/
void reverse(char *s);
main()
{
char s[] = "stringa di prova";
printf("%s\n",s);
printf("%s\n",(reverse(s),s));
}
void reverse(char *s)
{
char *p ;
char c ;
for(p = s + strlen(s)-1; s < p; s++,p--)
c = *s, *s = *p, *p = c;
}
programma 2
#include <stdio.h>
#include <string.h>
/*reverse() inverte una stringa*/
void reverse(char *s);
main()
{
char *s = "stringa di prova";
printf("%s\n",s);
printf("%s\n",(reverse(s),s));
}
void reverse(char *s)
{
char *p ;
char c ;
for(p = s + strlen(s)-1; s < p; s++,p--)
c = *s, *s = *p, *p = c;
}
in teoria sia s[] che *s dovrebbero puntare ad un area di memoria inizializzata... :mbe: o no?
uso il compilatore gcc 4.1.2