如何将整数附加到字符串

How do I append an integer to a string?

本文关键字:字符串 整数      更新时间:2023-10-16

这是我昨天问题的后续。

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

void downloadFile(const char* url, const char* fname, const char* id ) {
  //..
}

这被称为:

downloadFile("http://servera.com/file.txt", "/user/tmp/file.txt", "/home/user/Download/xxxx"(;

这适用于如图所示的固定id,但我需要xxxx替换为随机数:

srand(time(NULL));
int rdn = rand();

如果我尝试:

downloadFile("http://servera.com/file.txt", "/user/tmp/file.txt", "/home/user/Download/" + rdn);

我得到

error: invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]

那么如何将rdn附加到字符串"/home/user/Download/"? 例如,如果rdm == 123456789,我想将"/home/user/Download/123456789"传递给函数。

正如

@leemes所说,您可以使用sprintf:

char str[100];
sprintf(str,"/home/user/Download/%d",rdn);
downloadFile("http://servera.com/file.txt", "/user/tmp/file.txt", str);

如果你使用 c++ 11,你可以

std::string download_location = "/home/user/Download/" + std::to_string(rdn)
downloadFile("http://servera.com/file.txt", "/user/tmp/file.txt", download_location.c_str());

更好的办法是取消 char* 并在任何地方使用字符串。使用 char* 引入错误太容易了。

或者,您也可以使用字符串流进行通用和高效的字符串连接/格式化。

#include <sstream>
...
stringstream download_location_stream;
download_location_stream << "/home/user/Download" << rdn;
downloadFile("http://servera.com/file.txt", "/user/tmp/file.txt",
             download_location_stream.str().c_str());