Donnerstag, 7. Juli 2011

C-Strings duplizieren

Wenn ich einen C-String umkopieren wollte von dem ich zur Entwicklungszeit noch nicht wusste wie groß er ist, habe ich das bisher immer anscheinend ziemlich umständlich gemacht. Hier ein kleines Beispiel Programm:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char origin[]={"Hallo"};
    char *copy;

    // Inhalt von origin nach copy kopieren
    copy = (char*)malloc( strlen(origin)+1 );
    strcpy( copy, origin );

    // ...

    free( copy );
    return 0;
}


Durch meinen Ausbilder wurde ich jetzt auf die Funktion strdup() aufmerksam. Sier erleichtert die Arbeit ein wenig und scheint sogar schneller zu sein als meine Variante.
um den Geschwindigkeitsunterschied zu messen, habe mit der Windows Funktion GetTickCount() die Millisekunden seit dem Start des Systems erfragt. Dann habe ich das Programm, die Kopierfunktion in beiden Varianten 99999-mal ausführen lassen. Und am Ende wieder die Zeit gemessen. So konnte ich feststellen wie viel Zeit in Millisekunden vergangen war. 4 von 5 Durchläufen war die strdup() Funktion schneller.
In der optimierten Variante ersetzt man die Zeilen 10 und 11 einfach durch
 
copy=strdup( origin );