cinを使用してchar*変数に不定の長さの文字列を入力したいと思います。
私がすることができます:
char * tmp = "My string";
cout << tmp << endl;
system("pause");
それは完璧に動作します。
しかし、私はこれを行うことができません:
char * tmp
cin >> tmp;
何が悪いのか教えてくれませんか」
さて、あなたはchar*
を指すオブジェクトを作成していません。
char* tmp = new char[MAX_LENGTH];
それをより良く機能させるはずです(MAX_LENGTHを定義する必要があります)。これを行う別の方法は次のとおりです。
std::string strtmp;
cin >> strtmp;
const char* tmp = strtmp.c_str();
この方法は、を使用する必要がないことを意味しますnew
。
いくつかの問題:
char * tmp
cin >> tmp;
tmp は割り当てられません (現在はランダムです)。
operator>>
(char* または string と共に使用する場合) 単一の (空白で区切られた) 単語を読み取ります。
問題 1:
バッファを使用char*
して割り当てると、十分なスペースを割り当てられない場合があります。読み取りでは、バッファで使用できるよりも多くの文字が読み取られる場合があります。より良いアイデアは、std::string を使用することです (これから C-String を取得できます)。
問題 2:
不定の文字列を読み取る方法はありません。ただし、 を使用して一度に 1 行ずつ読み取ることができますstd::getline
。
std::string line;
std::getline(std::cin, line);
char* str = line.data();