如何使用终端命令从C ++程序打开多个图像?

时间:2019-02-02 18:02:30

标签: c++

我需要从一个网站中打开几张图片,并使用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上工作。

1 个答案:

答案 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字符串)

CC++中了解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标准都不保证程序的用户具有屏幕。如果您在某些数据中心计算机上运行程序,则可能会感到失望。