come rimuovere spazi extra dalla stringa in C

Ho una stringa che ha una stringa di spazi aggiuntivi, ad esempio:

char * s = " foo baa "; 

Voglio convertirlo in:

foo baa

Ho scritto questa funzione:

 void trim (char ** src) { char * p = strdup(* src); char * ret = malloc(strlen(*src) + 1); assert(ret != NULL); char * token; token = strtok(p, " \t"); while( NULL != token ) { while (*token) { *(ret ++) = *(token ++); } token = strtok(NULL, " \t"); } printf("ret = %s\n", ret); } 

ma mi ha dato una stringa vuota dal valore variabile ret . qualcuno potrebbe indicare il mio errore? Grazie in anticipo.

    Stai aumentando il tuo ret nel tempo, memorizzi l’indirizzo originale o usi pedice per accedere a diversi caratteri di ret .

      // snip char * ret = malloc(strlen(*src) + 1); assert(ret != NULL); char * ret_start = ret; //snap printf("ret_start = %s\n", ret_start); 

    Un’altra soluzione ingenua in c ++ (può essere facilmente modificata in codice c) —– 🙂

    inizialmente count=0 e str -> la tua stringa c ++

     for(i=0;i< str.size();i++) { if(str[i]!=' ') { str[j++]=str[i]; count=0; } else if(str[i]==' '&&count==0) { str[j++]=str[i]; count =1; } }