如何在系统函数中合并字符串?

时间:2018-04-25 04:05:13

标签: c

我有一些字符串foo,我希望能够运行as foo.s -o foo.o之类的字符串。如果是printf,我可以printf("as %s.s -o %s.o", foo, foo);。除了使用system函数之外,我希望能够做的就是这样。我怎样才能做到这一点?使用与printf相同的方法给出了一个错误,说我已经传递了太多的论据。

在我的代码中,我有:

   for (int i = 1; i < argc; i++) {
     system("as %s.s -o %s.o", *(argv + i), *(argv + i));
   }

但这给了我一个错误,说我有太多的论点。我想我可以经历循环遍历字符数组的痛苦过程,但我宁愿避免这种情况。

1 个答案:

答案 0 :(得分:5)

您可以使用snprintf()

int size = snprintf(NULL, 0, "as %s.s -o %s.o", argv[i], argv[i]);
if (size < 0) {
  return ERROR; // handle error as you like
}
char *p = malloc(++size); // we add the +1 for the nul terminate byte
if (p == NULL) {
  return ERROR;
}
int ret = snprintf(p, size, "as %s.s -o %s.o", argv[i], argv[i]);
if (ret < 0) {
  free(p);
  return ERROR;
}

system(p);

free(p); // if you don't need it anymore

注意:唯一的问题是,由于不明原因,snprintf()不会返回size_t。但这是我们可以在std中用来做你想做的事情的唯一功能。