0

我正在尝试system在 C 代码中使用命令,我想在其中执行 gzip -r 命令将 .txt 文件转换为 .txt.gz。现在要转换的文件的名称存储在指针中,并根据提供的文档在这个链接中,我们需要像这样将 gzip 的整个命令复制到一个字符串中

char gzip[100];
strcpy(gzip,"gzip -r /home/abc/xyz/pqr.txt");

现在我有一个问题,文件 pqr.txt 的名称存储在一个指针中。那么我如何将该指针传递给正在 gzip 中复制的字符串,然后传递给系统命令。

这是我正在使用的完整代码。

#include<stdio.h>
#include<stdlib.h>

int main()
{ char *ptr1= "gzip -r/home/shailendra/sampleprograms/C/output.txt";  //working
  //char *ptr2 = "/home/shailendra/sampleprograms/C/output.txt"; // pointer used tyo store th name of file
  //char *ptr =  " gzip -r *ptr2.sstv";  //not working
int i;
char tar[50];
system(ptr1); //working
system(ptr);  //not working
return 0;
}

所以不是首先初始化一个数组,然后将字符串复制到数组,然后传递给系统命令,而是将字符串传递给一个指针,然后将该指针传递给系统命令。

所以我主要关心的是如何将存储在某个指向字符串的指针中的文件名传递给它,以便由system命令处理

4

2 回答 2

1

只需将两者组合成一个字符串。sprintf可以帮你:

#include<stdio.h>
#include<stdlib.h>

int main()
{
  char *ptr2 = "/home/shailendra/sampleprograms/C/output.txt"; // pointer used tyo store th name of file
  char *ptr =  " gzip -r '%s'"; 
  int i;
  char buf[500];
  sprintf(buf, ptr, ptr2);
  system(buf); //working
  return 0;
}
于 2013-10-10T11:33:30.873 回答
0
#include<stdio.h>
#include<stdlib.h>

int 
main(void)
{
    const char *file = "/home/shailendra/sampleprograms/C/output.txt";

    char buf[500];

    if (snprintf(buf, sizeof buf, "gzip -r '%s'", file) >= sizeof buf) {
        /* command could not be composed, too long */
    } else {
        system(buf); 
    }

    return 0;
}
于 2013-10-10T12:30:10.053 回答