2016-12-08 4 views
-2

注:私が行っている課題の一部であるため、コードを投稿することはできません。ヌルターミネータは、パラメータとしてメソッドに渡されるときに文字列から削除されます。

今私は私が私が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でかなり悪いです)

+4

これは起こっていません。他に何かが起こっている。あなたがコードを投稿しないので、それが何であるかを判断することはできません。 –

+0

問題がおそらく存在するコードの部分を正確に削除しました。あなたは入力を読み込むために何を使用していますか?そのメソッドはNUL終了バイトを追加していますか(多くありますか)、それを追加する予定ですか?入力読み取り関数の戻り値は何ですか?読み込んだバイト数を返しますか?多分それは文字列の最初のバイトへのポインタを返しますか? 'buf [30] = {0}'を使って 'buf'を初期化することを検討してください。また、バッファオーバーフローのチェックも検討してください。 – Myst

+0

あなたの説明は*極めて*ありそうもありません。もし 'NUL'が' main'で終了していたとしても、あなたは途中で奇妙なバッファオーバーランの問題がなければ 'foo'でもそれはそのままです。おそらく、NULが正しく終了したことはありませんでした。 'main'に実際のコードを提供する必要があります。なぜなら、問題がどこにあるのかが分かるからです。 – ShadowRanger

答えて

0

私はあなたが与えた情報の量を推測していますが、あなたのバッファがスタック上にあり、クリアされていないようです。おそらくあなたにはいくらかのゴミがあります。バッファをゼロで初期化する必要があります。これを行うにはいくつかの方法があります。

  1. buf[] = {0};
  2. memset(buf, 0, sizeof(buf));

変数を宣言するとき、それはどのような値で初期化されることを覚えておいて、その特定の時間にその場所でスタックにあります。定義されていない動作を導入する可能性を排除するために、すべての変数を定義済みの状態に初期化する必要があります。限られた量の情報から、これがあなたの問題であるように見えます。

関連する問題