如何将cin转换为const char *

时间:2011-05-23 19:22:10

标签: c++ pointers constructor char

在我的程序中,我通过iostream获得输入:

char input[29];
cin >> input;

我需要为此类使用此输入参数,该参数具有此参数作为其构造函数

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

关于如何转换它的任何想法?

由于

3 个答案:

答案 0 :(得分:3)

string tmp;
cin >> tmp;
foo(tmp.c_str());

答案 1 :(得分:3)

您应该能够将input作为参数传递给构造函数。 char[]会衰减为char *,与const char *兼容。

但是:流入固定长度的缓冲区是一个非常糟糕的主意(如果某人提供的输入长度超过28个字符会怎么样?)。请改用std::string(如@ George的回答)。

答案 2 :(得分:2)

>>无法使用操作员知道它只能读取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字符串。

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);
}