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

行を変更する必要があると思いますsprint()

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

まあ、あなたは正しいパラメータでもそれを行うべきです.すべてでそれを行うことはあなたが望むものではないかもしれません.

于 2013-04-10T07:11:06.813 に答える
3

を使用する適切なアイデアがありますsprintf。ただし、同じようにフォーマット指定子が必要ですprintf。And|は、ここでは意味をなさないビットごとの OR 演算子です (定義されていたとしても、切断されたポインターが生成されます)

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);
于 2013-04-10T07:11:25.487 に答える
1

sprintf の使用方法を確認してください

それは不純なものを示す文字列である必要があります!! 同じで確認してください。

于 2013-04-10T07:22:33.860 に答える