Oppure

Loading
03/10/10 10:23
spode
    printf("Inserisci una parola: ");
    scanf("%s",&s1);

    for(m=strlen(s1),k=0;m!=-1;m--,k++)
    {
        strcpy(s2[k],s1[m]);
        }

        printf("\nLa stringa al contrario è %s",s2);


restituisce "segment fault". mi spiegate bene le stringhe? sono parecchi programmi che faccio e tutti danno lo stesso errore
aaa
03/10/10 12:46
ShellCoder_
scanf("%s",&s1); 


E' sbagliato...
s1 è già di per se un puntatore a stringa (char*)
quindi fai così:

scanf("%s",s1);


Inoltre fai un uso sbagliato di strcpy... non puoi passare come argomenti delle variabili di tipo char, devi passare puntatori a stringhe, quindi char*

Il prototipo è

char * strcpy ( char * destination, const char * source );
Ultima modifica effettuata da ShellCoder_ 03/10/10 12:53
aaa
03/10/10 13:26
Bonny
Premetto che ciò provato ma non sono riuscito ad implementare un algoritmo di reverse(Grave:pat:) però ho fatto una piccola ricerca e ho trovato una funzione del c che fa questa cosa strrev().
la funzione strrev inverte l'ordine dei caratteri di una stringa, il suo prototipo è il seguente:
char *strrev(char *str);

Il carattere terminatore resta in fondo alla stringa. La funzione restituisce un puntatore a str
esempio:
#include <stdio.h>
main(){   
       char x[10];
       printf("Inserisci la stringa: ");
       scanf("%s",x);               
       printf("\n\nstringa di partenza %s",x);      
       printf("\n\nstringa rovesciata %s\n\n", strrev(x));      
       system("PAUSE");
}

aaa
03/10/10 18:55
lorenzo
dai, non è complicato scrivere un reverse.

char * reverse(const char *strToRev)
{
	int l = strlen(strToRev);
	int l2 = 0;
	char *s = (char *)malloc(sizeof(char) + l);
	
	while(l2 < l)
	{
		s[l2] = strToRev[(l - l2) - 1];
		l2++;
	}
	return s;
}


anche se ammetto che non piace neanche a me questa soluzione.
Sarebbe meglio che fosse l'utilizzatore ad istanziare la stringa di ritorno, in questo modo.

void reverse(const char *strToRev, char *strReverse, int l)
{
	int l2 = 0;
	
	while(l2 < l)
	{
		strReverse[l2] = strToRev[(l - l2) - 1];
		l2++;
	}
}


in questo modo è l'utilizzatore a gestire totalmente la vita della stringa strReverse, sia in fase si creazione sia in fase di distruzione.


PS: non li ho provati ma credo non ci siano errori strani...
aaa
05/10/10 19:41
spode
grazie a tutti. comunque preferisco la prima risposta, perchè non mi va di imparare a memoria le funzioni.
aaa