C++:无法将字符串转换为 char*?
C++: Cannot convert string to char*?
我正在尝试使用以下代码在 C++ 中打印 Deque
的第一项(顶部项):
#include <queue>
#include <deque>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
deque<string> commandHistory;
for (int i = 0; i < 2; i++) {
commandHistory.push_back("asdf");
}
printf(commandHistory.at(1));
return 0;
}
但是,我在 printf 语句中得到一个错误:
error: cannot convert
‘__gnu_cxx::__alloc_traitsstd::allocator<std::__cxx11::basic_string<char
, std::__cxx11::basic_string >::value_type’ {aka ‘std::__cxx11::basic_string’} to ‘const char*’
但是,我不能像这样将 commandHistory.at(1)
转换为 const char*
:
printf((const char*) commandHistory.at(1));
尽管您的问题同时标记为 C 和 C++,但我会删除 C 标记,因为您的代码更多的是 C++ 而不是 C。
printf
的文档在这里:https://en.cppreference.com/w/cpp/io/c/fprintf
该函数的要点是它至少需要 1 个参数:所谓的格式字符串,正如签名所说,是 const char*
.
char *
和std::string
是完全不同的类型。 std::string
是一个 class 而 char *
只是一个指向内置类型的指针。您的 std::deque
包含 std::string
个对象。
方便的是,std::string
提供了一个转换为 const char*
的函数,正好适用于这些情况。
因此,工作片段将是:
// looks like you were missing cstdio
#include <cstdio>
#include <deque>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
deque<string> commandHistory;
for (int i = 0; i < 2; i++) {
commandHistory.push_back("asdf");
}
// note the `c_str` method call to get a c-style string from a std::string
printf(commandHistory.at(1).c_str());
return 0;
}
就像编译器说的那样,你不能将std::string
转换(用static_cast
)到char*
,但你可以用[=24获得所需的const char* =].
正如其他人提到的,您还可以包括 iostream
并使用 std::cout
其中 knows
对每种类型(const char*, std::string, int, ...) 也可以与您自己的类型一起使用。
编辑:cleaner/clearer code/explanations.
我正在尝试使用以下代码在 C++ 中打印 Deque
的第一项(顶部项):
#include <queue>
#include <deque>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
deque<string> commandHistory;
for (int i = 0; i < 2; i++) {
commandHistory.push_back("asdf");
}
printf(commandHistory.at(1));
return 0;
}
但是,我在 printf 语句中得到一个错误:
error: cannot convert ‘__gnu_cxx::__alloc_traitsstd::allocator<std::__cxx11::basic_string<char
, std::__cxx11::basic_string >::value_type’ {aka ‘std::__cxx11::basic_string’} to ‘const char*’
但是,我不能像这样将 commandHistory.at(1)
转换为 const char*
:
printf((const char*) commandHistory.at(1));
尽管您的问题同时标记为 C 和 C++,但我会删除 C 标记,因为您的代码更多的是 C++ 而不是 C。
printf
的文档在这里:https://en.cppreference.com/w/cpp/io/c/fprintf
该函数的要点是它至少需要 1 个参数:所谓的格式字符串,正如签名所说,是 const char*
.
char *
和std::string
是完全不同的类型。 std::string
是一个 class 而 char *
只是一个指向内置类型的指针。您的 std::deque
包含 std::string
个对象。
方便的是,std::string
提供了一个转换为 const char*
的函数,正好适用于这些情况。
因此,工作片段将是:
// looks like you were missing cstdio
#include <cstdio>
#include <deque>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
deque<string> commandHistory;
for (int i = 0; i < 2; i++) {
commandHistory.push_back("asdf");
}
// note the `c_str` method call to get a c-style string from a std::string
printf(commandHistory.at(1).c_str());
return 0;
}
就像编译器说的那样,你不能将std::string
转换(用static_cast
)到char*
,但你可以用[=24获得所需的const char* =].
正如其他人提到的,您还可以包括 iostream
并使用 std::cout
其中 knows
对每种类型(const char*, std::string, int, ...) 也可以与您自己的类型一起使用。
编辑:cleaner/clearer code/explanations.