2013-04-10 3 views
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 [я], то, что я хочу, чтобы выполнить дочерний процесс, который эта команда «rev argv [i]»?Использования параметров из командной строки в системных командах

Спасибо!

+0

Пожалуйста, используйте 'snprintf' вместо' sprintf' (и проверьте возвращаемое значение, чтобы определить, произошло ли усечение). – jamesdlin

ответ

3

Подумайте, вы должны изменить строку sprint()

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

Ну, вы должны сделать это на правильные параметры тоже делают это на всех не может быть то, что вы хотите.

+0

Вы быстро набираете! ... –

+0

Спасибо, за ваш ответ, чтобы изменить изменения в файле? Что-то вроде «sprint (name,« rev% s>% s », argv [i])»? – JackRobinson

3

У вас есть правильная идея использовать sprintf. Но ему нужен спецификатор формата, как и printf. И | является поразрядным оператором ИЛИ, который здесь не имеет смысла (он дал бы искаженный указатель, если бы он был определен).

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

Если вы хотите изменить файл, имя которого в arg[i], вы не можете просто перенаправить вывод в тот же файл, потому что оболочка (используется 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); 
+0

Вы тоже! :) .... – epatel

1

Пожалуйста, убедитесь, что использование Sprintf

он должен быть со строкой, которая показывает, что-то нечистое !! проверьте с этим же.

Смежные вопросы