我有一个带const char*
参数的函数。我需要连接两个字符串文字和一个int
来传递给这个参数。基本上这就是我想要做的事情:
open(const char* filename) {}
void loadFile(int fileID)
{
open("file" + fileID + ".xml");
}
int main()
{
loadFile(1);
return 0;
}
如何尽可能简单地完成这项工作?我尝试更改loadFile函数以获取const char*
然后执行open(std::string("file").c_str() + fileID + std::string(".xml").c_str());
,但后来我得到error: invalid operands of types 'const char*' and 'const char*' to binary 'operator+'
所以我很丢失。
答案 0 :(得分:4)
您需要使用以下内容:
std::ostringstream os;
os << "file" << fileID << ".xml";
open(os.str().c_str());
答案 1 :(得分:4)
您可以按照之前的说明使用stringstream
或Boost format:
#include <boost/format.hpp>
void loadFile(int fileID)
{
std::string filename = (boost::format("File%d.xml") % fileID).str();
open(filename.c_str();
}
答案 2 :(得分:3)
如果您的编译器支持C ++ 11,您可以使用std::to_string来获取数字的字符串表示形式:
std::string filename = "file" + std::to_string(fileId) + ".xml";
但是,如果你有Boost可用,我认为使用Boost格式,正如Johan的回答所讨论的那样,更具可读性。
答案 3 :(得分:0)
使用to_string()
open("file" + to_string(fileID) + ".xml");
答案 4 :(得分:0)
C ++是c的超集。你可以使用sprintf:
void loadFile(unsigned int fileID)
{
const int BUFFER_SIZE = 128;
char buffer[BUFFER_SIZE];
sprintf(buffer,"file%u.xml");
open(buffer);
}
这是可移植的,应该对所有传入的(uint)值都是安全的等等。
如果您担心超出缓冲区,也可以使用snprintf(buffer,BUFFER_SIZE,....)。