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

C++ 如何将整数附加到字符串?,c++,random,char,int,C++,Random,Char,Int,这是一个后续行动 我正在使用一个函数下载一个文件: void downloadFile(const char* url, const char* fname, const char* id ) { //.. } 这被称为: 下载文件(“,”/user/tmp/file.txt“,“/home/user/Download/xxxx”) 如图所示,固定的id可以正常工作,但我需要用一个随机数替换xxxx: srand(time(NULL)); int rdn = rand(); 如果我尝试:

这是一个后续行动

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

void downloadFile(const char* url, const char* fname, const char* id ) {
  //..
}
这被称为:

下载文件(“,”/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);
我明白了

错误:从“int”到“const char*”的转换无效[-fppermissive]


那么如何将
rdn
附加到字符串
“/home/user/Download/”
?例如,如果<代码> RDM=123456789 ,我想把<代码> / home /用户/下载/ 123456789”< /C> >函数。

< P>如果你使用C++ 11,你可以做< /P>
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());
#包括
...
stringstream下载\u位置\u流;

如果你使用C++ 11,你可以做< /P>
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());
#包括
...
stringstream下载\u位置\u流;

下载\u location\u stream正如@leemes所说,您可以使用sprintf:

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

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

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


sprintf
,但请使用
std::string
/
std::to_string
。你希望通过
“/home/user/Download/”+rdn
”实现什么?我对否决票和接近票感到非常困惑。在我看来,这似乎是一个程序员,他来自一个可以使用
+
将内容连接到字符串的背景,例如在Java中@barakmanos我敢肯定他是想把数字(作为一个字符串)连接到前缀上。正如你所看到的,你的意图并不是每个人都很清楚。因此,即使你的问题有一些非常好的属性,比如你看到的相关代码片段和错误,人们还是会因为无法理解你的意图而不屑一顾。我建议在这个问题上和将来都要更清楚。谢谢你的编辑@Rocket。不幸的是,许多如此之多的用户对并非100%符合规范的问题非常不耐烦。在他们的辩护中,关于我们对问题的期望的大多数规则都经过了深思熟虑、尝试和验证;然而,对于有PHP背景的人来说,您的代码的意图可能非常明显,因此我理解您为什么不包含它。关键是,不要对将来的发帖感到气馁。有
sprintf
,但请使用
std::string
/
std::to_string
。你希望通过
“/home/user/Download/”+rdn
”来实现什么?我对否决票和接近票感到非常困惑。在我看来,这似乎是一个程序员,他来自一个可以使用
+
将内容连接到字符串的背景,例如在Java中@barakmanos我敢肯定他是想把数字(作为一个字符串)连接到前缀上。正如你所看到的,你的意图并不是每个人都很清楚。因此,即使你的问题有一些非常好的属性,比如你看到的相关代码片段和错误,人们还是会因为无法理解你的意图而不屑一顾。我建议在这个问题上和将来都要更清楚。谢谢你的编辑@Rocket。不幸的是,许多如此之多的用户对并非100%符合规范的问题非常不耐烦。在他们的辩护中,关于我们对问题的期望的大多数规则都经过了深思熟虑、尝试和验证;然而,对于有PHP背景的人来说,您的代码的意图可能非常明显,因此我理解您为什么不包含它。重点是,不要对将来的发帖感到气馁。可能最好使用
snprintf()
而不是常规的
sprintf()
。出于~~对所有神圣事物的热爱~~对鼻魔的憎恨,请始终使用
snprintf
。你能解释一下snprintf和sprintf之间的区别吗?为什么会有人担心使用一个而不是另一个?如何使用snprintf?这个解决方案对我来说非常有效!字符串函数(包括sprintf、strcmp、strcpy等)有一个大小限制版本。例如,snprintf确保结果字符串的大小不超过指定的大小。它的用法如下:snprintf(str,99,“/home/user/Download/%d”,rdn);它的偏好是由于它的控制(和预测!)行为:)可能更好地使用
snprintf()
而不是常规的
sprintf()
。出于~~对所有神圣事物的热爱~~对鼻魔的憎恨,请始终使用
snprintf
。你能解释一下snprintf和sprintf之间的区别吗?为什么会有人担心使用一个而不是另一个?如何使用snprintf?这个解决方案对我来说非常有效!字符串函数(包括sprintf、strcmp、strcpy等)有一个大小限制版本。例如,snprintf确保结果字符串的大小不超过指定的大小。它的用法如下:snprintf(str,99,“/home/user/Download/%d”,rdn);它的偏爱是由于它的受控(和预测!)行为:当我尝试这个时,我不会在STD中得到字符串的错误。如果你做了很多字符串连接,你可能想考虑重载<代码>运算符+<代码>来帮助你。代码>/**使用字符串化T*/模板std::string运算符+(常量std::string&a,常量T&b){返回a+std::to_string(b);}
/***使用字符串化T*/模板std::string运算符+(常量T&a,常量std::string&b){返回std::to_string(a)+b;}
T