在一个 最近的问题, ,我了解到在某些情况下,您才得通过 char* 代替 std::string. 。我很喜欢 string, ,对于我只需要通过不变的字符串的情况,使用效果很好 .c_str(). 。从我看的方式上,最好利用字符串课程来轻松操纵。但是,对于需要输入的功能,我最终做了这样的事情:

std::string str;
char* cstr = new char[500]; // I figure dynamic allocation is a good idea just
getstr(cstr);               // in case I want the user to input the limit or
str = cstr;                 // something. Not sure if it matters.
delete[] cstr;
printw(str.c_str());

显然,不是这样,嗯,直接。现在,我是C ++的新手,所以我真的看不到树木的森林。在这样的情况下,每个输入都必须转换为c字符串并返回以利用 string有用的方法是,曼化并习惯c式的弦乐操纵是一个更好的主意吗?这种不断的来回转换是否太愚蠢了,无法处理?

有帮助吗?

解决方案

在您给出的示例中,通常可以阅读一行 std::string 使用 std::getline 功能: http://www.cplusplus.com/reference/string/getline/

当然,这并不能完成诅咒库所做的一切。如果您需要非con char* 因此,某些C函数可以读取其中,您可以使用 vector<char>. 。您可以创建一个 vector<char> 来自 string, ,反之亦然:

std::string       a("hello, world");
std::vector<char> b(a.begin(), a.end());

// if we want a string consisting of every byte in the vector
std::string       c(b.begin(), b.end());

// if we want a string only up to a NUL terminator in the vector
b.push_back(0);
std::string       d(&b[0]);

因此,您的示例变为:

std::vector<char> cstr(500);
getnstr(&cstr[0], 500);
printw(&cstr[0]);

其他提示

大多数STD :: String :: C_STR()实现(如果不是全部),只需将指针返回到内部缓冲区。没有开销。

但是请注意C_str()返回 const char*, ,不是char*。并且在函数调用后,指针将变得无效。因此,如果该函数可以做任何事情,例如将其写回传递的字符串或制作指针的副本,则无法使用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top