繰り返し文字列を作成する最も早く/最短の方法は何でしょうか?例えばCでn文字の文字列を作成する最も速い方法
、n = 10, char = '*', resulting allocated string: **********
繰り返し文字列を作成する最も早く/最短の方法は何でしょうか?例えばCでn文字の文字列を作成する最も速い方法
、n = 10, char = '*', resulting allocated string: **********
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;
必要な値と'*'
と10
を交換し、そして長さが事前に知られておらず、大きくなる可能性がある場合は、あなたのバッファを取得するためにbuf=malloc(n+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;
}
正直なところ、なぜあなたは、最速、それをやろうとしていますか?なぜそれをやるのではなく、必要に応じて後でスピードアップするのはなぜですか?あなただけの出力にこれを作成している場合
特に、あなただけ
void printtimes(int c, size_t n, FILE *f)
{
while(n--) fputc(c, f);
}
'fputc'を繰り返し使うのはかなり遅いです。このようなパディングが必要になったとき、私は通常、 'memset'で小さなバッファ(64-256バイト)を塗りつぶし、テールの余りの長さを小さくして繰り返し' fwrite 'します。それ以外の場合は、 'putc'または' putchar'に切り替えて、実装にマクロを置き換える機会があるようにしてください。 –
実際それは私の心のmemset()には及ばなかった。私はfor()ループを使うことを考えていましたが、ありがたいです:) – JoeWagner0
@R .. - True。私は主に、これが即時出力のためのものであれば、OPが最適化できることを示すことを試みていました。 –
おかげでみんなをできました!それは短かった。 – JoeWagner0