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 个字符串并提供组合结果作为答案而不影响输入。它不这样做,而是将第二个参数附加到第一个参数,返回第一个参数。

重新编写代码以创建缓冲区工作区。

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 回答