我需要从一个网站中打开几张图片,并使用for循环生成图片的网址-所有网址看起来都一样,但最后一个数字相同。
system(“ open”)对于单个URL可以很好地工作,但是我不知道如何传递引用命令中图像编号的变量,即字符串。
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
for (int i = 1; i <= 13; i++)
{
system("open http://www.site/images/image-[how do I pass i here??].jpg");
}
}
[编辑]我正在MacOS上工作。
答案 0 :(得分:1)
您应该动态构建传递给system
的C字符串。
例如:
for (int i=1; i<=13; i++) {
char cmdbuf[80];
snprintf(cmdbuf, sizeof(cmdbuf), "open http://www.site/images/image-%d.jpg", i);
int notok = system(cmdbuf);
if (notok) break;
}
以上实际上是C代码(在适当的#include
-s下可以在C ++中工作)。如果您想要真正的C ++代码,则可以使用一些std::ostringstream来构建一些std::string(并在将其传递给c_str
之前,使用其system
成员函数将其转换为C字符串)
在C和C++中了解snprintf
。 C和C ++是不同的语言。
在C ++中,std::system
与<cstdlib>
一起提供(您应该使用它而不是C标准标头<stdlib.h>
)。
顺便说一句,您可能对HTTP服务器库(例如libonion和HTTP客户端库(例如libcurl)感兴趣。您将更好地了解HTTP协议。
您的上述程序更好,更快地编写为shell script。对于您的特定情况,它会更快(编写),并且更健壮(即使运行速度可能慢了几毫秒)。请注意,open
不是标准的POSIX程序(在Linux上,您应该使用xdg-open
),并且在Windows上可能不存在(我一点也不知道)。
还请注意,C标准和POSIX标准都不保证程序的用户具有屏幕。如果您在某些数据中心计算机上运行程序,则可能会感到失望。