3

私は次のコードを使用しています。

#include <iostream>
using namespace std;

int main() {
  char* str;
  std::cin>>str;
  return 0;
}

私は明らかに、strは何も指していないポインタだけであり、したがって入力を受け取ることができないことを理解しています。しかし、文字ポインタに入力を取り込む方法はありますか?

4

2 に答える 2

0

あなたはこれを行うことができます:

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
于 2012-12-23T19:37:22.773 に答える