C++错误:无法将"std::<char>basic_string"转换为"const char*"
C++ error: cannot convert ‘std::basic_string<char>’ to ‘const char*’
>我正在使用一个函数来下载文件。
void downloadFile(const char* url, const char* fname) {
//..
}
这被称为:
downloadFile("http://servera.com/file.txt", "/user/tmp/file.txt");
这工作正常。
但是我想将 URL 更改为数组中的值。该数组存储加密值,解密后是字符串,因此我得到的问题error: cannot convert ‘std::basic_string<char>’ to ‘const char*’
我试过:
string test = decode(foo[5]);
const char* t1= test.c_str();
downloadFile(t1 "filename.txt", "/user/tmp/file.txt");
downloadFile(t1 + "filename.txt", "/user/tmp/file.txt");
和
downloadFile((decode(foo[5]).c_str()) + "filename.txt", "/user/tmp/file.txt");
这给了: error: invalid operands of types ‘const char*’ and ‘const char [17]’ to binary ‘operator+’
我做错了什么?
谢谢
C 字符串不能与 +
连接。
请改用std::string::+
:
downloadFile((test + "filename.txt").c_str(), "/user/tmp/file.txt");
请注意,c_str
只返回指向std::string
的内部字符数组的指针,因此它仅在执行downloadFile
函数期间有效。
试试这个:
downloadFile((decode(foo[5]) + "filename.txt").c_str(), "/user/tmp/file.txt");
运算符 + 不是为 char 数组定义的。
代码中的主要问题是您尝试使用 operator+
来连接原始 C 字符串(即.raw const char*
指针或原始char []
数组),这不起作用。
在 C 语言中,你应该使用适当的库函数(如strncat
或更安全的变体)来做到这一点;但由于你使用的是C++,你可以做得更好,写出更容易的代码:只需使用C++字符串类,如 std::string
。
事实上,C++ 标准库为使用 std::string
的operator+
提供了方便的重载,因此您可以以简单、直观和安全的方式连接C++字符串; 例如:
// Build your URL string
std::string test = decode(foo[5]);
std::string url = test + "filename.txt";
// Use std::string::c_str() to convert from C++ string
// to C raw string pointer const char*
downloadFile(url.c_str(), "/user/tmp/file.txt");
相关文章:
- 使用char类型将decimal转换为string,将string转换为decimal
- std::string 构造函数如何处理固定大小的 char[]?
- C++:将模板类型 char 转换为 std::string
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- 将"std::string {aka std::basic_string}"赋值中的不兼容类型<char>
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 为什么std::string没有(显式)const char*强制转换
- 将 std::string 转换为 const char* 用于 printf 消耗
- 我可以使用istream_iterator将<char>一些 istream 内容复制到 std::string 中吗?
- 让 'std::vector<unsigned char>' 从 'std::string' 中窃取内存
- 错误:请求从"Mstream"转换为非标量类型"std::string {aka std::basic_string<char>}"
- C :如何使用char / string 2D数组接受用户的1个以上的源性
- 我们应该在带有 char *func(char *string) 的函数中返回什么?需要简要说明这与 c 中的 char
- C++ 从 char* 到 char 的转换无效 (char* = *string.begin() )
- 无法在循环中读取Char/string
- 当我将char* string赋值给std::string时,可以释放它的内存吗?
- C char string和stint .h uint8_t在嵌入式系统中的兼容性
- 如何在c++中将LPBYTE转换为char */string
- 如何在等待用户输入int, float或其他类型时拒绝输入char/string