(C语言) print输出函数系列介绍

(C语言) print输出函数系列介绍

文章目录

  • (C语言) print输出函数系列介绍
  • 前言
  • 输出系列函数
    • 🖨️printf
    • 🖨️sprintf & snprintf
    • 🖨️fprintf
    • 🖨️vprintf
    • 🖨️dprintf
    • 🖨️puts
    • 🖨️fputs
    • 🖨️putchar
    • 🖨️putc & fputc
  • END

前言

起因是因为这么一段祝福语:

Linux 和 libc 给您

拜 年 啦

在这辞旧迎新的美好时刻:

🧨 printf 携手 fprintf, dprintf, sprintf, snprintf, vprintf, vfprintf, vdprintf, vsprintf, vsnprintf, fputc, fputs, putc, putchar, puts 祝您新的一年能大展宏图
🧨 scanf 携 sscanf, vsscanf, fscanf, vscanf, vfscanf, fgetc, fgets, getc, getchar 祝您财源广进,金银满仓,钱途无量
🧨 exit, _exit, _Exit, atexit, on_exit, quick_exit, at_quick_exit 希望您在这一年终末,能够善始善终,圆满收官
🧨 execl, execlp, execle, execv, execvp, execvpe 愿您新的一年开启新篇章,事业生活蒸蒸日上
🧨 fork, vfork, clone, __clone2, clone3 祝您家庭美满,阖家欢乐
🧨 wait, waitpid, waitid, wait3, wait4 希望各位都能遇得良机和贵人,新的一年一帆风顺
🧨 signal, sigaction, sigvec, sigblock, sigsetmask, siggetmask, sigmask, setjmp, sigsetjmp, longjmp, siglongjmp 愿您新的一年能逢凶化吉,巧解难题
最后,alarm, sleep, usleep, nanosleep, clock_nanosleep, pause 愿您新的一年能安枕无忧,好睡眠,身体康健

祝大家新年快乐,万事如意!

输出系列函数

🖨️printf

//   (C99 前) 
int printf( const char *format, ... );
//   (C99 起) 
int printf( const char *restrict format, ... );

从给定位置加载数据,转换为字符串等价物,并写结果到各种池。

写结果到 stdout 。

#include <stdio.h>int main() {int ret = printf("Hello World\n");printf("ret = %d\n", ret);
}
Hello World
ret = 12

🖨️sprintf & snprintf

✍️sprintf

//   (C99 前)
int sprintf( char *buffer, const char *format, ... ); 
//   (C99 起) 
int sprintf( char *restrict buffer, const char *restrict format, ... );

从给定位置加载数据,转换为字符串等价物,并写结果到各种池。

写结果到字符串 buffer

将字符输出到第一个char*的参数中。

结尾会补\0

#include <stdio.h>int main() {char str[1024] = "0123456789";// 尾部会补'\0'int ret = sprintf(str, "Hello World");printf("%s\n", str);return 0;
}
Hello World

snprintf

// (C99 起) 
int snprintf( char *restrict buffer, int bufsz, const char *restrict format, ... );
// (C11 起) 
int snprintf_s(char *restrict buffer, rsize_t bufsz, const char *restrict format, ...);

从给定位置加载数据,转换为字符串等价物,并写结果到各种池。

写结果到字符串 buffer 。至多写 buf_size - 1 个字符。产生的字符串会以空字符终止,除非 buf_size 为零。若 buf_size 为零,则不写入任何内容,且 buffer 可以是空指针,然而依旧计算返回值(会写入的字符数,不包含空终止符)并返回。

同样是输出到指定的char*中,但是有第二个参数来指定输出长度。

结尾不会补\0

#include <stdio.h>
#include <string.h>int main() {char str[1024] = "0123456789";int  len       = 5;// 尾部不加'\0'snprintf(str, 5, "Hello World\n");printf("strlen()=%d str=%s\n", strlen(str), str);str[len] = '\0';printf("strlen()=%d str=%s\n", strlen(str), str);
}
strlen()=10 str=Hello56789
strlen()=5 str=Hello

🖨️fprintf

//  (C99 前) 
int fprintf( FILE *stream, const char *format, ... );
//  (C99 起) 
int fprintf( FILE *restrict stream, const char *restrict format, ... );

从给定位置加载数据,转换为字符串等价物,并写结果到各种池。

写结果到文件流 stream

输出到指定的文件中FILE*

#include <stdio.h>int main() {FILE* pfile = fopen("out.txt", "w+");if (pfile) {fprintf(pfile, "Hello World");fclose(pfile);}
}
# 生成一个名为“out.txt”的函数
# 并在文件中写入:Hello World

🖨️vprintf

//  (C99 前) 
int vprintf( const char *format, va_list vlist );
//  (C99 起)
int vprintf( const char *restrict format, va_list vlist );

vlist 所定义的位置加载数据,将它们转换成字符串等价物,并将结果写入各种池。

写结果到 stdout。

变参输出,用于C语言式的变参函数的输出。

注意一下C语言中变参函数的使用方式。

#include <stdarg.h>
#include <stdio.h>/*** C语言的变参函数* - va_start* - va_end*/
void test_variable(const char *format, ...) {va_list args;va_start(args, format);// 打印变参内容vprintf(format, args);va_end(args);
}int main() {test_variable("Func[%s] Line[%d]\n", __func__, __LINE__);
}
Func[main] Line[18]

🖨️dprintf

int dprintf(int fd, const char *format, ...);
       dprintf(), vdprintf():Since glibc 2.10:_POSIX_C_SOURCE >= 200809LBefore glibc 2.10:_GNU_SOURCEThe function dprintf() is the same as fprintf() except that it outputs to a file descriptor, fd, instead of toa stdio stream.

这是一个非跨平台函数,输出到指定的fd当中。

注意:经测试linux中可行,windows中不行。

/*** linux code*/
#include <stdio.h>
#include <unistd.h>int main() {// int dprintf(int fd, const char *format, ...);dprintf(STDOUT_FILENO, "Hello World\n");return 0;
}
Hello World

🖨️puts

int puts( const char *str );

写入每个来自空终止字符串 str 的字符及附加换行符 ‘\n’ 到输出流 stdout ,如同以重复执行 putc 写入。

不写入来自 str 的空终止字符

#include <stdio.h>int main(void) {// 输出到 stdpoutint ret = puts("Hello World\n");printf("%d\n", ret);
}
Hello World0

🖨️fputs

//  (C99 前) 
int fputs( const char *str, FILE *stream );
//  (C99 起) 
int fputs( const char *restrict str, FILE *restrict stream ); 

写入字符 ch 到给定输出流 stream 。 putc() 可以实现为宏并对 stream 求值超过一次,故对应的参数决不应是有副效应的表达式。

在内部,在写入前将字符转换为 unsigned char 。

#include <errno.h>
#include <stdio.h>int main(void) {// 传入空指针,保证出现错误int ret = fputs("Hello World", NULL);if (ret == EOF) {perror("fputs() errno");}
}
fputs() errno: Invalid argument

🖨️putchar

int putchar( int ch );

写字符 chstdout 。在内部,字符于写入前被转换到 unsigned char 。

等价于 putc(ch, stdout)

#include <stdio.h>int main(void) {for (char c = 'a'; c != 'z'; c += 1) {int ret = putchar(c);if (ret == EOF) {if (ferror(stdout)) {perror("putchar() failed\n");break;}}}  // for
}
abcdefghijklmnopqrstuvwxy

🖨️putc & fputc

int fputc( int ch, FILE *stream );
int putc( int ch, FILE *stream ); 

输出单个字符到第二个参数设定的流中。

#include <stdio.h>int main(void) {for (char c = 'a'; c != 'z'; c += 1) {int ret;if (c & 1) {ret = putc(c, stdout);} else {ret = fputc(c, stdout);}if (ret == EOF) {if (ferror(stdout)) {perror("putc() failed\n");break;}}}  // for
}
abcdefghijklmnopqrstuvwxy

END

关注我,学习更多C/C++,算法,计算机知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring6--IOC反转控制 / 基于XML管理bean

1. 容器IOC 先理解概念&#xff0c;再进行实际操作。概念比较偏术语化&#xff0c;第一次看可能看不懂&#xff0c;建议多看几遍&#xff0c;再尝试自己独立复述一遍&#xff0c;效果会好些 1.1. IOC容器 1.1.1. 控制反转&#xff08;IOC&#xff09; IOC (Inversion of Con…

AL379芯片和AL383芯片是一款DC-DC升压芯片IC

首先&#xff0c;我们来了解HU6283芯片5V升压12V芯片的工作原理。这种芯片通常采用开关电源技术&#xff0c;通过高频开关控制&#xff0c;将5V的输入电压转换为12V的输出电压。开关电源技术具有高效、稳定、体积小等优点&#xff0c;因此在电子设备中得到了广泛应用。5V升压12…

Python 使用requests模块 执行Web API调用 获取网站数据并可视化

import requests#执行web api调用&#xff0c;并将响应存储在response_dict字典中 urlhttps://api.github.com/search/repositories?qlanguage:python&sortstars headers{Accept:application/vnd.github.v3json} rrequests.get(url,headersheaders) print(fStatus code:{r…

软件测评中心分享:软件鉴定测试与验收测试有什么联系和区别?

1、软件鉴定测试   软件鉴定测试是在软件开发完成后进行的一个核心环节&#xff0c;是通过对软件进行功能性、性能、安全性等方面的综合测试&#xff0c;来验证软件是否符合规定的需求和标准。 2、软件验收测试   软件验收测试是软件开发工作结束后的最后一个环节&#xf…

并发编程所需的底层基础

一、计算机运行的底层原理 1.多级层次的存储结构 ①:辅存 固态盘不是主要的应用对象&#xff0c;因为固态盘的使用次数是有限的&#xff0c;无法支撑高并发场景 磁盘存储的最基本原理是电生磁。 磁盘的磁道里边有很多的磁颗粒&#xff0c;磁颗粒上边有一层薄膜为了防止磁点氧…

5G网络架构与组网部署03--5G网络组网部署

1. SA组网与NSA组网 &#xff08;1&#xff09;NSA 非独立组网&#xff1a;终端同时接入4G基站和5G基站&#xff0c;只能实现5G部分功能 &#xff08;2&#xff09;SA组网【最终目标】&#xff1a;5G基站可以单独提供服务&#xff0c;接入的是5G核心网 区别&#xff1a;同一时间…

01-java面试题八股文-----java基础——20题

文章目录 <font color"red">1、java语言有哪些特点&#xff1a;<font color"red">2、面向对象和面向过程的区别<font color"red">3、标识符的命名规则。<font color"red">4、八种基本数据类型的大小&#xff…

STM32CubeMX+freeRTOS+事件组 多任务处理LED和串口打印

摘要:利用CubeMx配置freeeRTOS建立任务并使用事件组实现按键按下时 LED开关和打印信息到串口,上位机接收显示。 验证STM32CubeMx配置的FreeRTOS的任务和事件组使用 方案:按下Key1,绿灯亮或者灭,同时串口打印Key1被按下了到上位机;相关端口和串口配置省略。 新建三个任务…

Sora底层技术原理:Stable Diffusion运行原理

AIGC 热潮正猛烈地席卷开来&#xff0c;可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度&#xff0c;特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性&#xff0c;也在逐渐改变一部分行业的生产模式。惊艳其出色表现&#xff0c;也不禁好…

嵌入式开发--获取STM32产品系列的信息

嵌入式开发–获取STM32产品系列和容量信息 获取STM32产品系列 有时候我们需要知道当前MCU是STM32的哪一个系列&#xff0c;这当然可以从外部丝印看出来&#xff0c;但是运行在内部的软件如何知道呢&#xff1f; ST为我们提供了一个接口&#xff0c;对于STM32的所有MCU&#x…

xshell链接不上hadoop虚拟机

输入ifconfig查看是否有ens33 没有的话解决方案如下&#xff1a; systemctl stop NetworkManager systemctl restart network.service service network restartsys 依次输入以上命令 如果报错或者没用的话&#xff0c;进入root重新输入一遍这三个命令 大功告成&#xff01;…

LF-YOLO

LF-YOLO算法解读&#xff0c;针对x射线图像 1、EMF&#xff1a;网络结构的改变&#xff0c;enhanced multiscale feature(增强的多尺度特性)&#xff0c;多尺度融合模块。利用基于参数的方法和无参数的方法&#xff0c;可以同时结合X射线图像的局部和全局上下文&#xff0c;利用…

【C++从练气到飞升】04---拷贝构造函数

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 ⛳️推荐 一、拷贝构造函数的引入 1. 以日期类为例:进行的值拷贝是不会发生错误的 2. 以栈类为例:进行的值拷贝会发现发…

【一竞技CS2】pasha将骑行前往哥本哈根Major

1、传奇老将pasha最近发文表示&#xff1a;自己将在3月23日&#xff0c;从华沙的西吉斯蒙德圆柱出发&#xff0c;开始了前往哥本哈根Major的旅程。 去年pasha于当地时间5月12日清晨出发&#xff0c;并一路开启直播记录自己骑行前往巴黎的旅程。最终他于5月19日抵达埃菲尔铁塔。…

基于python+vue智慧农业小程序flask-django-php-nodejs

传统智慧农业采取了人工的管理方法&#xff0c;但这种管理方法存在着许多弊端&#xff0c;比如效率低下、安全性低以及信息传输的不准确等&#xff0c;同时由于智慧农业中会形成众多的个人文档和信息系统数据&#xff0c;通过人工方法对知识科普、土壤信息、水质信息、购物商城…

AVL树的实现

概念 1.为了解决二叉搜索树有序插入&#xff0c;会退化成链表&#xff0c;导致效率低下。 AVL树的左右子树高度差不超过1&#xff0c;所以AVL树的查找效率为logn。 2.在左子树高度增加&#xff0c;平衡因子减一&#xff0c;在右子树高度增加&#xff0c;平衡因子加一。 节点…

C# winform修改背景图 控件双向绑定 拖拽打开图片

修改背景图 说明 这里我准备基于百度飞桨PaddleSeg项目的人像分割模块做一个人像抠图&#xff0c;这里顺便用上了双向绑定和图片拖拽打开。 下面就是示例&#xff1a; 用颜色替换 用背景图替换 保存成功后的图片 一、使用百度飞桨PaddleSeg //初始化 引擎engine new Padd…

如何配置VS Code环境

一、下载 Visual Studio Code - Code Editing. Redefined 二、傻瓜式安装 如果出现没有安装路径选择&#xff0c;则看下面图片 经过上面操作后&#xff0c;可以修改路径 三、按照下面步骤配置环境变量即可 Visual Studio Code 中的 C 和 MinGW-w64 入门

UE5 C++增强输入

一.创建charactor&#xff0c;并且包含增强输入相关的头文件 1.项目名.build.cs。添加模块“EnhancedInput”&#xff0c;方便找到头文件和映射的一些文件。 PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine&q…

在基于Android相机预览的CV应用程序中使用 OpenCL

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0在Android 开发简介 下一篇&#xff1a;在 MacOS 中安装 本指南旨在帮助您在基于 Android 相机预览的 CV 应用程序中使用 OpenCL ™。教程是为 Android Studio 20…