用fscanf写一个m_fgets函数,要求实现fgets的所有功能.并用m_fgets函数实现二进制文件与文本文件的复制
时间: 2024-06-15 07:09:18 浏览: 86
m_fgets函数是一个自定义的函数,用于实现fgets函数的所有功能。它可以读取指定长度的字符串,并将其存储到指定的缓冲区中。
下面是用fscanf写一个m_fgets函数的示例代码:
```c
#include <stdio.h>
char* m_fgets(char* str, int size, FILE* stream) {
int i;
for (i = 0; i < size - 1; i++) {
if (fscanf(stream, "%c", &str[i]) != 1) {
break;
}
if (str[i] == '\n') {
i++;
break;
}
}
str[i] = '\0';
return (i > 0) ? str : NULL;
}
```
上述代码中,m_fgets函数使用了fscanf函数来逐个字符地读取输入流中的内容,并将其存储到指定的字符串缓冲区中。当读取到换行符或达到指定长度时,循环终止。
接下来,我们可以使用m_fgets函数来实现二进制文件与文本文件的复制。下面是一个示例代码:
```c
#include <stdio.h>
void copyFile(const char* srcFile, const char* destFile) {
FILE* src = fopen(srcFile, "rb");
FILE* dest = fopen(destFile, "wb");
if (src == NULL || dest == NULL) {
printf("文件打开失败\n");
return;
}
char buffer[1024];
while (m_fgets(buffer, sizeof(buffer), src) != NULL) {
fputs(buffer, dest);
}
fclose(src);
fclose(dest);
}
int main() {
const char* srcFile = "source.txt";
const char* destFile = "destination.txt";
copyFile(srcFile, destFile);
printf("文件复制成功\n");
return 0;
}
```
上述代码中,copyFile函数使用了m_fgets函数来逐行读取源文件的内容,并将其写入目标文件中。通过循环调用m_fgets函数,可以实现整个文件的复制。
阅读全文