C++で文字列を入力することについて完全に混乱しています。C++:charによる文字列入力の取得*
char str[4];
cin>>str;
cout<<str;
作品。ただし、
char* str;
cin>>str;
cout<<str;
は機能しません。 なぜですか?後者の場合には、何のメモリが割り当てられていないため
C++で文字列を入力することについて完全に混乱しています。C++:charによる文字列入力の取得*
char str[4];
cin>>str;
cout<<str;
作品。ただし、
char* str;
cin>>str;
cout<<str;
は機能しません。 なぜですか?後者の場合には、何のメモリが割り当てられていないため
Jean-FrançoisFabreが言ったように、std::string
を使用して目標を達成することができます。
#define N 3
char str[N + 1];
fgets(str, sizeof(str), stdin);
これは、あなたが勝ったことを確認します:あなたがそのような何かを行くかもしれない -
は、念のために、あなたは(あなたのケース3に固定サイズのNで)、純粋なCの文法や文字配列を使用したいですオーバーフローが発生します。
:あなたが持っているあなたはstr=new char[4];
を行うことができ
:(SEGVそう)、しかし、もしあなたの入力3文字以上、あなたは=> UB未定義のメモリ領域に書き込みをしていますバッファオーバーフローの問題もあります。ユーザーが入力した内容を制御することはできないため、発生しないようにすることはできません。
あなたがC++を使っていることから、私はこのようなstd::string
を使用することをお勧めしたい、だから、
を(もちろんあなたの最初の作業の場合には起こりませんでした):
std::string str;
cin>>str;
cout<<str;
char *
これ以上か配列、もはや割り当て、メモリリーク...:実際のC + +。 C関数とのインターフェイスを設定する場合は、str.c_str()
を使用してオブジェクトの表現をconst char *
にすることができます。恐ろしいstrcat
とは反対に、a + b
、そしてリストは延々と続く...
私はstring
がchar
よりも優れているかで時間手を出すことができ、または:
また、このようstring
オブジェクトを連結することができます私はそれらのような他の回答にリンクできます
あなたは 'str = new char [4];が私の問題を解決することを意味していますか? – Delsa
は_immediate_問題を解決します。しかし、char配列を使わないでください。あなたはC++の力を持っています。 –
多分、OPはなぜstd :: stringが使いやすくなるかについてのいくつかの言葉が必要です。 –
あなたは 'str = new char [4];によってそれを意味しますが、問題は解決されます。 – Delsa
はい、もっと問題があります。私の答えを見てください。 –