Cómo eliminar espacios extra de la cadena en C

Tengo una cadena que tiene una cadena de espacios adicionales, por ejemplo:

char * s = " foo baa "; 

Quiero convertirlo a:

foo baa

He escrito esta función:

 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); } 

pero me dio una cadena vacía del valor de la variable ret . ¿Alguien puede señalar mi error? gracias por adelantado.

Usted está incrementando ret en su tiempo, almacena la dirección original o usa un subíndice para acceder a diferentes caracteres de ret .

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

Otra solución ingenua en c ++ (se puede cambiar fácilmente a código c) —– 🙂

inicialmente count=0 y str -> tu cadena 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; } }