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つのバッファチェックを無視します)?