Ich bin auf einem (Ubuntu präzise) Linux-System, und ich möchte führende Zeichen (Tabulatoren) aus einer Zeichenfolge in C entfernen. Ich dachte, der folgende Code wurde auf meiner vorherigen Installation (ubuntu oneric), aber ich fand jetzt, dass es nicht mehr funktioniert (beachten sie, dass diese für die allgemeine UTF-8-Zeichen) eine vereinfachte Version eines Codes ist:Entfernen Sie Zeichen aus der Zeichenfolge in Standard 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;
}
ich
gcc -o removetab removetab.c
Bei der Ausführung RemoveTab I erhalten
MY_LINE_ORIG= interface(quiet=true):
MY_LINE=interfae(quiet==true):
Notiere die Vervielfältigung von "=" und die fehlende "c"! Was ist falsch oder wie kann ich dies alternativ erreichen. Der Code sollte UTF-8-Strings unterstützen.
Übrigens, Sie machen viele Kopien aus keinem Grund, machen diesen Algorithmus etwas wie O (N!) Für ein Ding, das O (N) mit einem vernünftigen Algorithmus sein könnte. –