2010-11-20 15 views

答えて

11

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;

必要な値と'*'10を交換し、そして長さが事前に知られておらず、大きくなる可能性がある場合は、あなたのバッファを取得するためにbuf=malloc(n+1);を使用しています。

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); 
} 
+0

'fputc'を繰り返し使うのはかなり遅いです。このようなパディングが必要になったとき、私は通常、 'memset'で小さなバッファ(64-256バイト)を塗りつぶし、テールの余りの長さを小さくして繰り返し' fwrite 'します。それ以外の場合は、 'putc'または' putchar'に切り替えて、実装にマクロを置き換える機会があるようにしてください。 –

+0

実際それは私の心のmemset()には及ばなかった。私はfor()ループを使うことを考えていましたが、ありがたいです:) – JoeWagner0

+0

@R .. - True。私は主に、これが即時出力のためのものであれば、OPが最適化できることを示すことを試みていました。 –

関連する問題