2010-11-20 4 views

Antwort

11

Verwenden Sie memset.

int n = 10; 
char c = '*'; 

char* buf = malloc(n+1); 
memset(buf, c, n); 
buf[n] = '\0'; 

free(buf); 
6

memset(buf, '*', 10); buf[10]=0;

ersetzen '*' und 10 mit den Werten, die Sie wollen, und wenn die Länge nicht im Voraus bekannt ist und groß sein könnte, benutzen Sie buf=malloc(n+1); Ihre Puffer zu erhalten.

1
char *allocate(int c, size_t n) 
{ 
    if(!c) return calloc(n + 1); 
    char *s = malloc(n + 1); 
    memset(s, c, n); 
    s[n] = '\0'; 
    return s; 
} 

Ehrlich gesagt, warum versuchen Sie es am schnellsten zu tun? Warum tust du es nicht einfach und beschleunigst es später, wenn es nötig ist?

Insbesondere sind, wenn Sie nur diese es zur Ausgabe erstellen, könnten Sie einfach

void printtimes(int c, size_t n, FILE *f) 
{ 
    while(n--) fputc(c, f); 
} 
+0

Wiederholtes Verwenden von 'fputc' ist ziemlich langsam. Wenn ich Padding wie dieses benötigt habe, fülle ich typischerweise einen kleinen Puffer (64-256 Bytes) mit "memset" und wiederhole es dann mit "fwrite", wobei ich eine kleinere Länge für den Rest des Tails verwende. Wenn nichts anderes, wechseln Sie zu 'putc' oder' putchar', damit die Implementierung eine Chance hat, sie durch ein Makro zu ersetzen. –

+0

Eigentlich kam es mir nicht in den Sinn memset(); Ich dachte an eine for() Schleife, aber danke :) – JoeWagner0

+0

@R .. - True. Ich habe meistens nur versucht zu zeigen, dass das OP optimieren könnte, wenn dies für die sofortige Ausgabe gedacht war. –

Verwandte Themen