-1

以下のコードをチェックしてください

  char *str;
  gets(str); // or fgets
  puts(str);

c++ のサンプル プログラムです。実際には、char ポインタにメモリ位置を割り当てていないため、良いコーディング方法ではないと感じていますstr。本にはchar array[10]長さ制限があると書いてchar pointer strありますが、固定長ではなく、いくらでも入力charsできます。しかし、私が C で学んだように、メモリ アドレスを割り当てずにポインタを使用することはできないと私は信じています。

これが正しいやり方だと思うのですが、

  char a[100];
  char *str=a;
  fgets(a,100,stdin);
  puts(a);

よろしくお願いします。変数メモリアドレスを割り当てずにポインタをコーディングするのは良い方法ですか? またはそれを行うための最良の方法は何ですか。メモリ アドレスを割り当てずにポインタを使用するとどうなるか教えてください。ありがとうございます。

4

4 に答える 4

4

変数メモリアドレスを割り当てずにポインタをコーディングするのは良い方法ですか?

いいえ。初期化されていないポインターを逆参照すると、未定義の動作が発生します。絶対に実行しないでください。

可変長配列が必要な場合は、代わりに (std::string文字列を表す場合) またはstd::vector(実質的にすべてのデータ型の場合) を使用することを検討してください。

于 2013-06-01T16:42:57.770 に答える
1

2番目の例は正しいです。初期化されていないポインターを使用すると、未定義の動作が発生します。

于 2013-06-01T16:42:28.883 に答える