【问题标题】:use of system() function to open a filename given at runtime in C [closed]使用 system() 函数打开 C 运行时给出的文件名 [关闭]
【发布时间】:2013-01-28 06:37:51
【问题描述】:

我想使用 system() 函数打开一个在运行时给出名称的图像。对于固定名称,它可以工作,但是如果我传递另一个参数,则会出错,因为它没有为两个参数定义。

我想要类似下面的东西,使用任何可以实现的功能。

system("gthumb <file1>");

file1 存储运行时给出的文件名。

谢谢!

【问题讨论】:

  • 请使用您的代码的相关部分编辑您的帖子,以便人们可以告诉您它有什么问题。
  • 用你想要执行的完整命令创建一个字符串,可能使用snprintf(),并将生成的字符串传递给system()
  • 你[可能不应该使用系统][1]。您可以只链接到 libgthumb 并使用他们的 API(如果他们可以公开访问)而不是调用二进制文件吗? [1]:cplusplus.com/forum/articles/11153

标签: c system


【解决方案1】:

您应该避免使用system() 调用。

无论如何,你必须在这里做的,首先是使用 sprintf() 计算完整的命令行。你必须这样做:sprintf(string, "gthumb %s", file1); 然后,你打电话给system(string);

【讨论】:

  • sprintf 很危险(可能缓冲区溢出)并且正在被弃用。 snprintf 好多了。
  • @BasileStarynkevitch snprintf 系列的功能不是 C89 标准的一部分。所以使用严格 C89 的人将无法使用它们。只是为了完整性。 :)
【解决方案2】:

您可以创建命令字符串,例如像

  char cmdbuf[128];
  snprintf (cmdbuf, sizeof(cmdbuf), "githumb %s", path);
  int res = system(cmdbuf);

但您应该检查path 的有效性(或实施引用机制);如果它包含; rm -rf $HOME,你会不高兴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多