0

サブ関数を 2 回呼び出しますが、2 回目は前の呼び出しからの値でローカル変数を出力できます。これを Linux でテストしました。2 番目の文字列が前の文字列と同じアドレスを指すのはなぜですか? それを避ける方法は?どうもありがとう。

#include <stdio.h>

int main(){

  second();
  second();
  return 0;
}
int second (){
  char tmp[40];
  printf("%s \n", tmp);
  strcpy (tmp, "set");
  return 0;
}
4

3 に答える 3

0

私の理解に基づいて、あなたはdeclare tmp[40]もう一度繰り返しましたが、内部のデータをクリアしているので、試してみchar tmp[40] as a global variableませんか? 関数の呼び出しごとに SET という単語を追加しようとしていますか?

于 2013-09-17T01:47:42.130 に答える
0
int second (){
  char tmp[40];
  printf("%s \n", tmp);  // undefined behavior here
  strcpy (tmp, "set");
  return 0;
}

これは未定義の動作 (初期化されていないメモリの読み取り) であるため、最初の呼び出しから結果が得られる (または得られない) 場合があります。

于 2013-09-17T01:47:43.507 に答える