putc 和fputc
时间: 2024-05-10 20:17:47 浏览: 117
`putc` 和 `fputc` 都是 C 语言中用于将一个字符写入文件的函数,它们的函数原型分别为:
```c
int putc(int c, FILE *stream);
int fputc(int c, FILE *stream);
```
两个函数的参数都是一个字符 `c` 和一个文件指针 `stream`,表示要写入的字符和要写入的文件。它们的返回值都是写入的字符的 ASCII 码,或者在写入出错时返回 `EOF`。
两个函数的区别在于,`putc` 可以被实现为一个宏定义,而 `fputc` 必须是一个函数。因此,`putc` 的执行效率可能会更高一些,但是 `fputc` 更加稳定,因为它是一个函数,可以被链接库重新定义。
相关问题
usart.c中并无调用fputc函数
那么如果你想在USART中使用fputc函数,可以按照以下步骤进行:
1. 在USART初始化函数中打开stdio流:
```c
#include <stdio.h>
#include "usart.h"
void USART_Init(void)
{
// ...
// USART初始化代码
// ...
// 打开stdio流
stdout = &uart_output;
stdin = &uart_input;
}
```
2. 添加以下代码,定义stdio输出流所需的uart_output结构体和_putc函数:
```c
#include <stdio.h>
#include "usart.h"
// 定义stdio输出流所需的结构体
static struct __FILE uart_output = {
.putc = _putc,
.puts = _puts,
.write = NULL,
.flush = NULL
};
// 定义_putc函数,将字符输出到USART中
void _putc(char ch)
{
// 等待USART发送缓冲区为空
while ((USART1->SR & USART_SR_TXE) == 0);
// 将字符发送到USART中
USART1->DR = ch;
}
```
3. 现在你就可以在USART中使用printf函数输出字符串了:
```c
#include <stdio.h>
#include "usart.h"
int main(void)
{
USART_Init();
printf("Hello, world!\r\n");
while (1);
}
```
注意:在使用printf函数输出字符串时,需要在字符串的末尾添加"\r\n",以便USART正确解析字符串。
下面程序的功能是将一个磁盘中的二进制文件复制到另一个磁盘中,两个文件名随命令行一起输入,输入时原有文件的文件名在前,新复制文件的文件名在后。请填空补全。(注意:填写时不要加额外空格) #include <stdio.h> int main(int argc,char *argv[]) { FILE *old,*new; char ch; if(argc!=3) { printf(“You forgot to enter a filename\n”); exit(0); } if((old=fopen( ," "))==NULL) { printf(“cannot open infile\n”); exit(0); } if((new=fopen( ," "))==NULL) { printf(“cannot open outfile\n”); exit(0); } while(!feof(old)) fputc( ,new); fclose(old); fclose(new); return 0; }
程序如下:
```
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp1, *fp2;
char ch;
if (argc != 3) {
printf("Usage: %s file1 file2\n", argv[0]);
exit(1);
}
if ((fp1 = fopen(argv[1], "rb")) == NULL) {
printf("Cannot open %s\n", argv[1]);
exit(1);
}
if ((fp2 = fopen(argv[2], "wb")) == NULL) {
printf("Cannot open %s\n", argv[2]);
exit(1);
}
while ((ch = getc(fp1)) != EOF) {
putc(ch, fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
```
空格填写如下:
将一个磁盘中的二进制文件复制到另一个磁盘中,两个文件名随命令行一起输入,输入时原有文件的文件名在前,新复制文件的文件名在后。
阅读全文