C++错误:无法将"std::<char>basic_string"转换为"const char*"

C++ error: cannot convert ‘std::basic_string<char>’ to ‘const char*’

本文关键字:char string 转换 const basic lt 错误 C++ std gt      更新时间:2023-10-16

>我正在使用一个函数来下载文件。

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::stringoperator+提供了方便的重载,因此您可以以简单、直观和安全的方式连接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");
相关文章: