如何将整数附加到字符串?

时间:2016-02-11 16:23:55

标签: c++ random char int

这是my question yesterday的后续行动。

我使用函数下载文件:

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"传递给函数。

2 个答案:

答案 0 :(得分:3)

如果您使用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 *引入错误太容易了。

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

#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());

答案 1 :(得分:3)

如@leemes所说,你可以使用sprintf:

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