Buon giorno a tutti, non riesco a compilare questo programma mi da sempre segmentation fault, lo scopo di questo esercizio è che non avendo capito ancora bene l'uso di doppio puntatori ho implementato un esercizio "prova" per scambiare i caratteri in ordine alfabetico.
esempio:
input: ciao
output: acio

input: prova
output: aporv

ecco il codice:

codice:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
void BubbleSort_string(char **s,int n);
void visualizza(char *s,int n);

int main(){

	char s[100];
	int i,n=0,c;
	
	while ((c=getchar()!='\n')){
	     s[i]=c;
	      i++;
	      n++; //lunghezza della stringa
	}
	s[i]='\0';
	
	
	BubbleSort_string(&s,n);


	// visualizzo i caratteri in ordine alfabetico
	  for (i=0;i<n;i++){
		printf(" %c ",s[i]);
            }
		
        
	
	  return 0;
}

void BubbleSort_string(char **s,int n){

	int i=0,flag;
	int temp;

   do {

	flag=0;
	 for (i=0;i<n-1;i++){
		if (*s[i]>*s[i+1]){
		    temp=*s[i];
		    *s[i]=*s[i+1];
		    *s[i+1]=temp;
			flag=1;
		 }
	  }
    }
       while (flag==1);
}
/* messaggio del compilatore

warning: passing argument 1 of ‘BubbleSort_string’ from incompatible pointer type

*/

in Generale se voglio scambiare i caratteri di una stringa o muovere i caratteri da una posizione all'altra devo sempre utilizzare il doppio puntatore?