状況を考えてみましょう:私はおそらくヌルで終了する文字列を格納する既知の長さのバッファを持っており、文字列の長さを知る必要があります。文字列の長さをある程度まで計算するための標準的なC関数はありますか?
問題は、私はstrlen()
とを使用している場合、文字列はnullで終了していないことが判明しているバッファ終端を超えて読みながらプログラムは、未定義の動作に実行されます。だから私は、次のような機能を持っているしたいと思います:
size_t strlenUpTo(char* buffer, size_t limit)
{
size_t count = 0;
while(count < limit && *buffer != 0) {
count++;
buffer++;
}
return count;
}
それは文字列の長さを返しませんが、決してバッファ終端を超えて読み取ろうとするように。
このような機能は既にCライブラリにありますか、自分で使用する必要はありますか?
システムに 'strnlen'がない場合、私の回答をドロップインの置き換えとして使うことができます。置き換えられた 'strnlen'の命名とそれがPOSIXの' strnlen'関数と同じセマンティクスを持つことを保証することはおそらく、異なる名前の、おそらく異なって動作するバージョンを作るよりも良いでしょう。 –