2016-12-31 6 views
-3

C++で文字列を入力することについて完全に混乱しています。C++:charによる文字列入力の取得*

char str[4]; 
cin>>str; 
cout<<str; 

作品。ただし、

char* str; 
cin>>str; 
cout<<str; 

は機能しません。 なぜですか?後者の場合には、何のメモリが割り当てられていないため

+0

あなたは 'str = new char [4];によってそれを意味しますが、問題は解決されます。 – Delsa

+0

はい、もっと問題があります。私の答えを見てください。 –

答えて

0

Jean-FrançoisFabreが言ったように、std::stringを使用して目標を達成することができます。

#define N 3 
char str[N + 1]; 
fgets(str, sizeof(str), stdin); 

これは、あなたが勝ったことを確認します:あなたがそのような何かを行くかもしれない -

は、念のために、あなたは(あなたのケース3に固定サイズのNで)、純粋なCの文法や文字配列を使用したいですオーバーフローが発生します。

6

:あなたが持っているあなたは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、そしてリストは延々と続く...

私はstringcharよりも優れているかで時間手を出すことができ、または:

また、このようstringオブジェクトを連結することができます私はそれらのような他の回答にリンクできます

+0

あなたは 'str = new char [4];が私の問題を解決することを意味していますか? – Delsa

+1

は_immediate_問題を解決します。しかし、char配列を使わないでください。あなたはC++の力を持っています。 –

+0

多分、OPはなぜstd :: stringが使いやすくなるかについてのいくつかの言葉が必要です。 –

関連する問題