这是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"
传递给函数。
答案 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);