2012-03-29 1 views
2

Im Folgenden finden Sie eine meiner C functiosn:Versiegen Zeichenfolge Zuordnung

void test(char * ptr) 
{ 
    ptr[0] = 'T'; 
    ptr[1] = 'O'; 
    ptr[2] = 'P'; 
    ptr[3] = '\0'; 
} 

Gibt es eine Möglichkeit, dies zu verkürzen? Ich habe versucht

void test(char * ptr) 
{ 
    ptr[0] = "TOP"; 
} 

aber das funktioniert nicht. [Hinweis: Ich habe keine Bibliotheksfunktion strcpy() oder ähnlich.]

+1

Wenn Sie kein 'strcpy' haben, möchten Sie vielleicht eines schreiben. Es ist so ziemlich ein One Liner. –

+0

'* ((int *) ptr) = 'T' << 24 | 'O' << 16 | 'P' << 8; ' – nothrow

+0

ptr =" TOP "; macht es nicht? –

Antwort

8

Nein, Sie müssen Ihre eigenen strcpy() schreiben. Sie können nur char ptr[] = "TOP" für Initialisierer tun.

Aber Sie können dies tun, die leicht zu strcpy geändert werden kann():

void test(char * ptr) 
{ 
    char * S_TOP = "TOP"; 

    do { 
     *ptr++ = *S_TOP++; 
    } while(*S_TOP != '\0'); 
} 
7

GCC Unter der Annahme, werfen Sie einen Blick auf die Liste der built-in functions. Insbesondere sind sowohl __builtin_strcpy() als auch __builtin_memcpy() als Compiler-Instrinsics verfügbar und benötigen keine Bibliotheksunterstützung.