更正代码:#include<stdio.h> #include<fcntl.h> #include<stdlib.h> #define Length 1024 int main(int argc, char **argv){ int fdw,fdr,len; char str[Length]; char sourcename[15],targetname[20]; printf("Please input the name of the source file:"); scanf("%s", sourcename); printf("Please input the name of the target file:"); scanf("%s", targetname); fdr = open(sourcename, O_RDONLY); if(fdr < 0){ printf("read file error."); exit(0); } len = read(fdr,str,Length); fdw = open(targetname,O_CREAT|O_RDWR,S_IRUSR|S_IWUSR); if(fdw < 0){ printf("creat file error."); exit(0); } write(fdw,str,len); close(fdr); close(fdw); return 0; }
时间: 2024-01-20 21:01:54 浏览: 108
树莓派系列教程7:如何点亮一个LED灯(上).docx-综合文档
这段代码的逻辑是从指定的源文件中读取内容,然后将内容写入到指定的目标文件中。
代码本身没有什么明显的错误,但是可以根据个人习惯对代码进行一些改进和优化。以下是一些可能的改进点:
1. 对于文件名的输入,可以使用fgets()函数代替scanf(),以避免输入过长的文件名导致的缓冲区溢出问题。
2. 可以在打开文件时添加一些额外的标志,比如O_TRUNC,以确保目标文件已经存在时会被清空,防止写入的内容和原文件中的内容重复。
3. 在读取和写入文件时,可以使用循环,以确保能够读取和写入文件的全部内容。
下面是改进后的代码示例:
```
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 1024
int main(int argc, char **argv) {
int fdw, fdr, len;
char str[LENGTH];
char sourcename[256], targetname[256];
printf("Please input the name of the source file:");
fgets(sourcename, sizeof(sourcename), stdin);
sourcename[strcspn(sourcename, "\n")] = '\0'; // 去掉输入的换行符
printf("Please input the name of the target file:");
fgets(targetname, sizeof(targetname), stdin);
targetname[strcspn(targetname, "\n")] = '\0';
fdr = open(sourcename, O_RDONLY);
if (fdr < 0) {
printf("read file error.");
exit(0);
}
fdw = open(targetname, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR);
if (fdw < 0) {
printf("create file error.");
exit(0);
}
while ((len = read(fdr, str, LENGTH)) > 0) {
write(fdw, str, len);
}
close(fdr);
close(fdw);
return 0;
}
```
阅读全文