注:私が行っている課題の一部であるため、コードを投稿することはできません。ヌルターミネータは、パラメータとしてメソッドに渡されるときに文字列から削除されます。
今私は私が私がfooでBUFの値がnullターミネータとただし、文字列ではないを持っていることに気づくデバッグするよしかしとき
int main(){
char buf[30];
// Code that reads input and assigns it to buf
// Adds null terminator to the end of the buf
foo(buf);
}
void foo(char * buf){
// Do something
}
のようなものを持っています。私はstrcmpを使ってbufとfoo()メソッドの別の文字列を比較しています。これが私のコードのバグの原因であると思われます。
これは何が起こっているのですか? (申し訳ありませんが、私はまだCでかなり悪いです)
これは起こっていません。他に何かが起こっている。あなたがコードを投稿しないので、それが何であるかを判断することはできません。 –
問題がおそらく存在するコードの部分を正確に削除しました。あなたは入力を読み込むために何を使用していますか?そのメソッドはNUL終了バイトを追加していますか(多くありますか)、それを追加する予定ですか?入力読み取り関数の戻り値は何ですか?読み込んだバイト数を返しますか?多分それは文字列の最初のバイトへのポインタを返しますか? 'buf [30] = {0}'を使って 'buf'を初期化することを検討してください。また、バッファオーバーフローのチェックも検討してください。 – Myst
あなたの説明は*極めて*ありそうもありません。もし 'NUL'が' main'で終了していたとしても、あなたは途中で奇妙なバッファオーバーランの問題がなければ 'foo'でもそれはそのままです。おそらく、NULが正しく終了したことはありませんでした。 'main'に実際のコードを提供する必要があります。なぜなら、問題がどこにあるのかが分かるからです。 – ShadowRanger