#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]”?
谢谢!
答案 0 :(得分:3)
认为您需要更改第sprint()
行
sprintf(name,"rev %s", argv[i]);
嗯,你也应该在正确的参数上做到这一点,在所有参数上做这可能不是你想要的。
答案 1 :(得分:3)
您有正确的想法使用sprintf
。但它需要像printf
那样的格式说明符。 |
是一个按位OR运算符,这里没有任何意义(如果它被定义,它会产生一个残缺的指针)。
snprintf(name, sizeof(name), "rev %s", argv[i]);
如果要修改名称为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);
答案 2 :(得分:1)
请确保您使用sprintf
它必须是一个字符串,它显示了一些不纯的东西!! 检查一下。