C语言 如何在新文件名的末尾追加一个字符?

vybvopom  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(240)
int main(int argc, char *argv[]) {

    int fd_src = open(argv[1], O_RDWR);

    ssize_t size = lseek(fd_src, 0, SEEK_END);

    char *buf[size];

    char *prefix = strcat(argv[1], "_");

    for(int i = 0; i < size-1; i++) {

        lseek(fd_src, i, SEEK_SET);

        read(fd_src, buf, 1);

        char *postfix = &buf[0];

        char *filename = strcat(prefix, postfix);

        int fd_dest = open(filename, O_RDWR | O_CREAT | O_EXCL, 0644);

        write(fd_dest, buf, 1);

        close(fd_dest);

    }

    close(fd_src);

    return 0;

}

输入文件“filename”仅包含字符串“abc”
运行程序后,输出如下所示:
文件名_a //文件包含a文件名_ab //文件包含b文件名_abc //文件包含c
但我希望它看起来像这样:
filename_a //文件包含a文件名_B //文件包含b文件名_c //文件包含c
我已经试过这样声明后缀:
char * 后缀= &buf[i]
但是那也不起作用。有什么建议吗?:)

q8l4jmvw

q8l4jmvw1#

char *prefix = strcat(argv[1], "_");

这是错误的,因为您将一个字符附加到了argv[1]中保存的字符串,而argv[1]不太可能足够大以容纳它。这很可能是未定义的行为。
从您的代码中,我了解到您希望将文件名附加到文件内容的第一个字符。
第一次
它是一个指针数组,而不是字符数组。它将以sizeof(char *) is always > sizeof(char)的形式工作,但需要一个字符数组。

char buf[size];
brc7rcf0

brc7rcf02#

我刚刚解决了它...我意识到我已经设置了标志“O_EXCL”。它现在工作正常。:-)

相关问题