2
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main(int argc,char *argv[]){
int i,j;
for (i=0;i<argc;i++){
printf("Name: %s\n",argv[i]);
    char name[100];
    sprintf(name,"echo"| rev, argv[i]);
    system(name);

}

};

我有这个,我的问题是如何反转名称存储在 argv[i] 中的文件,我想要的是执行一个执行此命令“rev argv[i]”的子进程?

谢谢!

4

3 回答 3

3

你有正确的想法来使用sprintf. 但它需要一个格式说明符,就像它一样printf。And|是一个按位或运算符,在这里没有任何意义(如果它被定义,它会产生一个残缺的指针)。

snprintf(name, sizeof(name), "rev %s", argv[i]);

如果要修改名称为 in 的文件,arg[i]则不能只将输出重定向到同一个文件中,因为 shell(用于system执行命令)同时打开两个文件,并且打开一个用于写入的文件会截断其长度。因此,您需要将输出重定向到不同的文件,然后在单独的命令中复制回原始文件。

snprintf(name, sizeof(name), "rev %s > %s.modified", argv[i], argv[i]);
system(name);
snprintf(name, sizeof(name), "mv %s.modified %s", argv[i], argv[i]);
system(name);
于 2013-04-10T07:11:25.487 回答
3

认为你需要换线sprint()

sprintf(name,"rev %s", argv[i]);

好吧,您也应该在正确的参数上执行此操作,对所有参数执行此操作可能不是您想要的。

于 2013-04-10T07:11:06.813 回答
1

请确保您使用 sprintf

它必须带有一个字符串,它显示了一些不纯的东西!检查相同。

于 2013-04-10T07:22:33.860 回答