Estoy en un sistema Linux (ubuntu preciso) y quiero eliminar los caracteres iniciales (tabuladores) de una cadena en C. Pensé que el siguiente código estaba funcionando en mi instalación anterior (ubuntu oneric) pero he encontrado ahora que ya no funciona (tenga en cuenta que esta es una versión simplificada de un código para general de caracteres UTF-8):Eliminar caracteres de la cadena en el estándar C
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
int nbytes = 10000;
char *my_line, *my_char;
my_line = (char *)malloc((nbytes + 1)*sizeof(char));
strcpy(my_line,"\tinterface(quiet=true):");
printf("MY_LINE_ORIG=%s\n",my_line);
while((my_char=strchr(my_line,9))!=NULL){
strcpy(my_char, my_char+1);
}
printf("MY_LINE=%s\n",my_line);
return 0;
}
yo
gcc -o removetab removetab.c
Al ejecutar removetab I obtener
MY_LINE_ORIG= interface(quiet=true):
MY_LINE=interfae(quiet==true):
¡Tenga en cuenta la publicación de "=" y la "c" faltante! ¿Qué está mal o cómo puedo lograrlo de forma alternativa? El código debería ser compatible con cadenas UTF-8.
Por cierto, usted está haciendo muchas copias sin ninguna razón, por lo que este algoritmo es algo así como O (N!) Para algo que podría ser O (N) con un algoritmo razonable. –