Quel serait le moyen le plus rapide/le plus court de créer une chaîne de caractères répétés?Quel serait le moyen le plus rapide de créer une chaîne de n caractères en C
Par exemple, n = 10, char = '*', resulting allocated string: **********
Quel serait le moyen le plus rapide/le plus court de créer une chaîne de caractères répétés?Quel serait le moyen le plus rapide de créer une chaîne de n caractères en C
Par exemple, n = 10, char = '*', resulting allocated string: **********
Utilisez memset.
int n = 10;
char c = '*';
char* buf = malloc(n+1);
memset(buf, c, n);
buf[n] = '\0';
free(buf);
memset(buf, '*', 10); buf[10]=0;
Remplacer '*'
et 10
avec les valeurs que vous voulez, et si la longueur est pas connue à l'avance et pourrait être grande, utilisez buf=malloc(n+1);
pour obtenir votre tampon.
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;
}
Honnêtement, pourquoi vous essayez de le faire le plus rapide? Pourquoi ne pas le faire, puis l'accélérer plus tard si nécessaire?
En particulier, si vous créez seulement cela à la sortie, vous pouvez simplement
void printtimes(int c, size_t n, FILE *f)
{
while(n--) fputc(c, f);
}
L'utilisation répétée de 'fputc' est assez lente. Quand j'ai besoin d'un padding comme ça, je remplis généralement un petit buffer (64-256 octets) avec 'memset' puis plusieurs fois' fwrite', en utilisant une plus petite longueur pour le reste de la queue. Si rien d'autre, passez à 'putc' ou' putchar' pour que l'implémentation ait une chance de le remplacer par une macro. –
En fait, cela ne m'est pas venu à l'esprit memset(); Je pensais utiliser une boucle for(), mais merci :) – JoeWagner0
@R .. - True. J'essayais surtout de montrer que l'OP pouvait optimiser si cela était destiné à une sortie immédiate. –
Merci les gars! C'était court. – JoeWagner0