Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将getstr()中的字符串转换为char*_C++_String_Char - Fatal编程技术网

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
设置为空字符串do
message[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帮助我解决我的问题,即使我不知道我到底在做什么,我还是在几个小时后运行了它。这让我失去了我的声誉