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

How can I open several images from a C++ program using terminal commands?

本文关键字:图像 程序 C++ 何使用 终端 命令      更新时间:2023-10-16

我需要从一个网站上打开几个图像,生成带有for循环的图像的url-所有的url看起来都一样,但都是最后一个数字。

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。

您应该动态构建传递给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(并在将其传递给system之前使用其c_str成员函数将其转换为C字符串)

阅读C和C++中的snprintf。C和C++是不同的语言。

在C++中,std::system提供了<cstdlib>(您应该使用它来代替作为C标准头的<stdlib.h>)。

顺便说一句,您可能对诸如lib洋葱之类的HTTP服务器库和诸如libcurl之类的HTTP客户端库感兴趣。您将更好地了解HTTP协议。

您的上述程序作为shell脚本编写得更好、更快。对于您的特定情况,它会更快(写入),更健壮(即使运行速度可能慢几毫秒)。请注意,open不是一个标准的POSIX程序(在Linux上,您可以使用xdg-open),并且可能不存在于Windows上(我根本不知道)。

还要注意,无论是C标准还是POSIX标准都不能保证程序的用户有一个屏幕。如果您在某台数据中心机器上运行程序,您可能会感到失望。