Jestem na (ubuntu precise) systemie Linux i chcę usunąć znaki wiodące (tabulatory) z ciągu w C. Myślałem, że poniższy kod działał na mojej poprzedniej instalacji (ubuntu oneric), ale uważam, że teraz to już nie działa (należy pamiętać, że jest to uproszczona wersja kodu dla ogólnego UTF-8 znaków):Usuń znaki z ciągu znaków w standardowym 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;
}
mam
gcc -o removetab removetab.c
Podczas wykonywania removeTab I uzyskaj
MY_LINE_ORIG= interface(quiet=true):
MY_LINE=interfae(quiet==true):
Uwaga na publikację "=" i brakującą literę "c"! Co jest nie tak i jak mogę to osiągnąć alternatywnie. Kod powinien obsługiwać ciągi znaków UTF-8.
Nawiasem mówiąc, robisz dużo kopii bez powodu, czyniąc ten algorytm czymś w rodzaju O (N!) Dla rzeczy, która może być O (N) z rozsądnym algorytmem. –