0

c で unix func "cp" のアナログを実行すると、実現に問題が発生します。

struct stat fsd;
stat(argv[argc - 1], &fsd);

if ((fsd.st_mode & S_IFMT) == S_IFDIR) {

    unsigned int i;

    for (i = src; i < argc - 1; i++) {

        char *xpath = strcat(argv[argc - 1], "/");
              xpath = strcat(argv[argc - 1], argv[i]);

        if (cpf(argv[i], xpath) == 0) {

            printf( "%s -> %s\n", argv[i], xpath);
        }

    }
}

コマンドの例: ./cp f1 f2 f3 f4 dir
ここで: f* - ファイルおよび dir - ディレクトリ。したがって、ファイルをディレクトリにコピーする必要がありますが、ディレクトリの正しいパスを作成できません。

出力:

f1 -> dir/f1
f2 -> dir/f1/f2
f3 -> dir/f1/f2/f3
f4 -> dir/f1/f2/f3/f4

しかし、私は必要です:

f1 -> dir/f1
f2 -> dir/f2
f3 -> dir/f3
f4 -> dir/f4

本当にそれを修正する方法がわかりません:(

4

1 に答える 1

2

多くの主な問題は、

xpath = strcat(argv[argc - 1], ...

argv[argc - 1] 追加テキストに連結します。

strcat()入力に影響を与えずに、2 つの文字列を連結し、結合結果を回答として提供すると考えていることは確かです。これは行わず、2 番目のパラメーターを 1 番目のパラメーターに追加して、最初のパラメーターを返します。

コードを書き直して、バッファー ワークスペースを作成します。

char xpath[1000];
strcpy(xpath, argv[argc - 1]);
strcat(xpath, "/");
strcat(xpath, argv[i]);

ところで、sizeof() xpath は MAXPATHLEN またはその他のシステム定数である可能性がありますが、それは別の問題です。を参照してください#include limits.h

于 2013-05-27T14:52:15.087 に答える