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]
但是那也不起作用。有什么建议吗?:)
2条答案
按热度按时间q8l4jmvw1#
这是错误的,因为您将一个字符附加到了argv[1]中保存的字符串,而argv[1]不太可能足够大以容纳它。这很可能是未定义的行为。
从您的代码中,我了解到您希望将文件名附加到文件内容的第一个字符。
第一次
它是一个指针数组,而不是字符数组。它将以
sizeof(char *) is always > sizeof(char)
的形式工作,但需要一个字符数组。brc7rcf02#
我刚刚解决了它...我意识到我已经设置了标志“O_EXCL”。它现在工作正常。:-)