对于正在编写的应用程序,我有一个要在ncurses窗口中显示的字符串类型变量:
#include <iostream>
#include <ncurses.h>
#include <string>
int main(){
std::string mystring = "A sample string\n";
// Entering the ncurses window
initscr();
printw(mystring);
getch();
endwin();
}
在编译时会引发以下错误:
test_app.cpp: In function ‘int main()’:
test_app.cpp:12:18: error: cannot convert ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘const char*’ for argument ‘1’ to ‘int printw(const char*, ...)’
printw(mystring);
我要去哪里错了?我该如何纠正?
答案 0 :(得分:1)
c ++中的一些关键概念:
字符串文字声明(也称为“这是字符串文字”)的类型为const char[N]
,其中N是字符串的大小,包括空终止符。
std::string != const char[]
但是,可以使用此构造函数(找到的here)与std::string
一起构建const char[]
:
basic_string( const CharT* s,
const Allocator& alloc = Allocator() );
CharT
与您的实现特定的char
等效。
现在,请注意printw
如何获取const char*
。您没有将const char *
传递给printw
,而是传递了std::string
,它们也不能隐式转换为const char *
。
我们有两种方法可以解决您的问题...
1)将字符串存储为char [](又名char *):
#include <iostream>
#include <ncurses.h>
#include <string>
int main(){
char mystring[] = "A sample string\n"; // Can decay to a char * implicitly.
// Entering the ncurses window
initscr();
printw(mystring);
getch();
endwin();
}
2)将std::string
表示为char *
:
#include <iostream>
#include <ncurses.h>
#include <string>
int main(){
std::string mystring = "A sample string\n";
// Entering the ncurses window
initscr();
// Since c++ 11, mystring.data() is required to return a null-terminated char *.
// If c++ version < c++11, use mystring.c_str().
printw(mystring.data());
getch();
endwin();
}