strcpy()Cの機能が悪い、悪いと思っている人もいるようです。strncpy()通常はバッファ オーバーフローを回避するために使用する方がよいことは認めますが、次の (このstrdup()関数を使用することができなかった人のための関数の実装) は、安全に使用し、オーバーフローすることはstrcpy()ありません。
char *strdup(const char *s1)
{
char *s2 = malloc(strlen(s1)+1);
if(s2 == NULL)
{
return NULL;
}
strcpy(s2, s1);
return s2;
}
*s2を保存するのに十分なスペースがあることが保証されており*s1、を使用するとstrcpy()、結果を別の関数に保存して、strlen()後で不要な (この場合) の長さパラメーターとして使用する必要がなくなりますstrncpy()。しかし、長さパラメータを必要とするや を使ってこの関数を書く人strncpy()もいます。memcpy()人々がこれについてどう思うか知りたいです。特定の状況で安全だと思う場合strcpy()は、そう言ってください。このような状況で使用しない正当な理由がある場合は、それを教えてください。このような状況で使用するstrcpy()方がよい理由を知りたいです。大丈夫だと思うが、ここにない場合は、説明してください。strncpy()memcpy()strcpy()
memcpy()基本的に、他の人が使用するときに使用する人strcpy()もいれば、プレーンを使用する人もいる理由を知りたいだけですstrncpy()。3つよりも1つを優先するロジックはありますか(最初の2つのバッファチェックを無視します)?