Как конвертировать cin в const char * - PullRequest
0 голосов
/ 23 мая 2011

В моей программе я получаю ввод через iostream:

char input[29];
cin >> input;

Мне нужно использовать этот входной параметр для этого класса, у которого этот параметр является конструктором

class::class(const char* value) {
  /* etc */ }

Есть идеи, как его конвертировать?

Спасибо

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

Вы должны просто иметь возможность передать input в качестве аргумента вашему конструктору.char[] превратится в char *, что совместимо с const char *.

Однако: Потоковая передача в буфер фиксированной длины - очень плохая идея (что есликто-то предоставляет ввод длиной более 28 символов?).Вместо этого используйте std::string (как в ответе Джорджа).

3 голосов
/ 23 мая 2011
string tmp;
cin >> tmp;
foo(tmp.c_str());
2 голосов
/ 23 мая 2011

Оператор >> не может знать, что он может читать только 29 байтов.
Поэтому вы должны указать это явно:

char input[29] = { 0 }; // note sets all characters to '\0' thus the read will be '\0' terminated.
cin.read(input, 28);    // leave 1 byte for '\0'

В качестве альтернативы вы можете использовать стандартную строку.

std::string word;
cin >> word;  // reads one space seporated word.

Class objet(word.c_str()); // Or alternatively make you class work with strings.
                           // Which would be the correct and better choice.

Если вам нужно прочитать целую строку, а не слово

std::string line;
std::getline(std::cin, line);

Class objet(line.c_str()); // Or alternatively make you class work with strings.
                           // Which would be the correct and better choice.

Обратите внимание, что во всем вышеперечисленном вы должны действительно проверить состояние потока после чтения, чтобы убедиться, что чтение сработало.

std::string word;
if (cin >> word)   // using the if automatically checks the state. (see other questions).
{
    Class objet(word);
}
...