私は次のコードを使用しています。
#include <iostream>
using namespace std;
int main() {
char* str;
std::cin>>str;
return 0;
}
私は明らかに、strは何も指していないポインタだけであり、したがって入力を受け取ることができないことを理解しています。しかし、文字ポインタに入力を取り込む方法はありますか?
あなたはこれを行うことができます:
int buffer_size = 50
char *c = new char[buffer_size];
std::cin >> std::setw(buffer_size) >> c;
ただし、これには問題があります。主に、管理する必要のある固定サイズのraw配列を使用するという事実。また、例外のない安全な方法で配列の存続期間を手動で管理しますが、スマートポインターで修正できます。
std::unique_ptr<char[]> c(new char[buffer_size]);
std::cin >> std::setw(buffer_size) >> c.get();
生の配列から完全に離れて、独自のリソースを管理するオブジェクトに移動する方が適切です。
std::string s;
std::cin >> s;
文字列からのが必要な場合は、char const *
を使用できますstd::string::c_str()
。
void foo(char const *);
foo(s.c_str());
または、本当に必要なchar*
場合は、次のようにすることができます。
void foo(char *c, size_t n);
foo(s.data(), s.size()); // C++11
// C++03
foo( (s.size() ? &s[0] : NULL), s.size()); // pass a pointer if the string is not empty, NULL otherwise