2012-02-27 8 views
1

文字列がEclipseとgdbでヌル終了するかどうかを確認する方法はありますか? 「デフォルト」のデバッグで、引用符で保存したいテキストが表示されたら、正しくヌル終了していると見なすことができますか? また、文字列を正しくコピーするための最良の方法は何ですか?C:Eclipse/gdbとNullで終わる文字列

+0

**あなたの最初の100個の文字を表示します。文字列を表示するには、100を適切な数字に置き換えます。 – Jack

+0

gdb x/100sbは、文字列の次のメモリ位置がランダムなnullを持つ可能性があるため、不確実です。 – resultsway

答えて

1

使用はstrncpyは安全のために、これはあなただけでその終了していない場合には、最大長を指定することができます。チェックするのは難しいですが、デバッガに正しく表示されていれば正しく終了します。

編集:それは明確にそれが唯一の長さを指定した場合、関数呼び出しは、奇妙な結果が得られないだろうという意味で、あなたはまだ手動で文字列を終了する必要があり、それが安全になると判断している必要があります。

一般に、nullで終了しない唯一の時間は、Cライブラリのすべての関数が適切に終了した文字列を返すと考えられるため、プログラマのエラーによるものです。可能性のあるエラーはターミネータの余分なバイトを忘れる可能性があります。私は遭遇した文字列の問題が、多分カスタム操作関数を除いてヌルターミネーターが失敗したためであった時代を考えるのは難しいです。 GDB、** "X/100sb文字列変数" で

+1

これは悪いアドバイスです。 - 'strncpy()'は、ソース文字列が 'n'文字以上であればバッファを終了させません。 http://www.gratisoft.us/todd/papers/strlcpy.htmlで述べたように、 "プログラマーがstrncpy()とstrncat()で安全な文字列操作をしようとしたが、 APIの微妙さ。 –

+0

@MichaelBurr私が知っているのは、ヌルで終わっているかどうかわからない場合は、strncpyを使うべきだということでした。 –

関連する問題