C++ 无法将getstr()中的字符串转换为char*
所以我只是想把一个空字符串写到一个C++ 无法将getstr()中的字符串转换为char*,c++,string,char,C++,String,Char,所以我只是想把一个空字符串写到一个char[80]中,我得到了一个错误“在getstr()中无法将字符串转换为char*”?(我通常在将字符串写入char数组(如char[80]=“hello world”)时会遇到这种情况) 这包括了很多ncurses的东西,顺便说一句,没有包括其他功能 int main(){ std::string message; //... for(;;){ wrefresh(chatWin); message
char[80]
中,我得到了一个错误“在getstr()中无法将字符串转换为char*”?(我通常在将字符串写入char
数组(如char[80]=“hello world”
)时会遇到这种情况)
这包括了很多ncurses的东西,顺便说一句,没有包括其他功能
int main(){
std::string message;
//...
for(;;){
wrefresh(chatWin);
message = "hello world";
getstr(message);
if(message != ""){
displayMessage(message, displayLine, displayWin);
wmove(chatWin, 1, 7);
}
}
}
我希望它从函数中获取用户的输入,但它抛出错误“无法在getstr()中将字符串转换为char*”
getstr
来自ncurses。非常感谢您的帮助,并提前向您表示感谢 我怀疑你写过这样的东西:
int main() {
char message[80];
message = "";
}
strcpy(message, "");
message[0] = 0;
这将产生以下错误:
错误:将“常量字符[1]”赋值给“字符[80]”时,类型不兼容
要将
message
设置为空字符串,您可以使用惯用的方法将空字符串复制到message
数组中,如下所示:
int main() {
char message[80];
message = "";
}
strcpy(message, "");
message[0] = 0;
或者简单地在数组的开头放置一个空终止字符,如下所示:
int main() {
char message[80];
message = "";
}
strcpy(message, "");
message[0] = 0;
凭良心写这篇文章时不能不提到
std::string
是个好主意。但是,将所有使用字符数组的现有代码移植到使用std::string
的技术中可能会很不方便。例如,getstr
可能需要char*
而不是std::string
。相反,您需要通过std::vector
在字符数组和std::string
之间进行互操作。我认为在这个答案中准确地回答怎么做超出了范围
#include <string>
#include <curses.h>
int main() {
std::string message;
message = ""; // This works.
getstr(message); // This doesn't. (assuming `getstr` from curses.h)
}
#包括
#包括
int main(){
std::字符串消息;
message=”“;//这是有效的。
getstr(message);//这不是。(假设来自curses.h的`getstr`)
}
另见不要使用
char消息[80]代码>,而使用std::string消息
。不能将字符串文字分配给char
数组。C++不这样工作。如果您打算编写现代C++代码,请使用<代码> STD::String < /C>。如果您打算编写旧式C代码,请使用strcpy()
@Versalys向我们展示如何尝试使用std::string
。将message
设置为空字符串domessage[0]=0
通过将问题更改为使用std::string message
而不是char message[80]
,现在您有了一个全新的问题。您的getstr
需要的是char*
,而不是std::string
。虽然std::string
是一个很好的主意,但利用它是一个更大的改变;您不能只是插入并替换消息的声明
,而不调整所有用法。你可能应该把它放回去,以免这个问题出轨。当你不知道源字符串的大小时,千万不要使用strcpy或类似的函数;它可能导致未定义的行为和安全漏洞。使用strncpy
(和getnstr
)代替。顺便说一下,由于std::string::data()
访问的底层缓冲区不再是const
,因此您可以直接使用它。@erburate,您的建议是将getnstr
数据写入std::string::data())
不知道目的地大小也是危险的。您没有解释如何确保data()
处有足够的字节使getnstr
成功(可能至少需要80个字节)。您没有解释如果getnstr
写入的字符少于字符串的原始大小,它将如何设置std::string
的长度。像message.erase(std::find(message.begin()、message.end()、'\0')、message.end())这样的丑陋的东西我想在getnstr
之后需要code>。我不推荐你的书面建议。这不是答案,而是对你的答案的评论。感谢@Wyck帮助我解决我的问题,即使我不知道我到底在做什么,我还是在几个小时后运行了它。这让我失去了我的声誉