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

news2024/9/25 7:19:42

(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 >= 200809L
           Before glibc 2.10:
               _GNU_SOURCE
               
       The function dprintf() is the same as fprintf() except that it outputs to a file descriptor, fd, instead of to
       a 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) {
    // 输出到 stdpout
    int ret = puts("Hello World\n");
    printf("%d\n", ret);
}
Hello World

0

🖨️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.coloradmin.cn/o/1533918.html

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

相关文章

【C语言】基本语法知识C语言函数操作符详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;C语言_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.基本语法 1.1 代码解释 1.1.1 main()主函数 1.1.2 int 1.1.3 { } 1.1.4 printf()库函数 1.1.5 stdio.h头文件 1.2 C语言的…

js 输出负数的个数,和所有正整数的平均值。

首先输入要输入的整数个数n&#xff0c;然后输入n个整数。输出为n个整数中负数的个数&#xff0c;和所有正整数的平均值&#xff0c;结果保留一位小数。 0即不是正整数&#xff0c;也不是负数&#xff0c;不计入计算。如果没有正数&#xff0c;则平均值为0。输入 11 1 2 3 4 5 …

雷池 WAF 社区版:下一代 Web 应用防火墙的革新

黑客的挑战 智能语义分析算法&#xff1a; 黑客们常利用复杂技术进行攻击&#xff0c;但雷池社区版的智能语义分析算法能深入解析攻击本质&#xff0c;即使是最复杂的攻击手法也难以逃脱。 0day攻击防御&#xff1a; 传统防火墙难以防御未知攻击&#xff0c;但雷池社区版能有效…

Delphi7应用教程学习1.3【练习题目】:文本及悬停文字的显示

这个例子主要用到了btn的Hint 属性&#xff0c;Hint是提示的意思。 还有Delphi7还是很好用的&#xff0c;改变了的属性是粗体&#xff0c;默认没有改变的属性为细体。

项目中如何获取Java运行环境中的文件内容

业务场景&#xff1a;获取Java运行环境下的hsminfo.properties文件中&#xff0c;获取key为TESTRSAKEY的值 步骤&#xff1a; 1、获取Java运行环境的根目录&#xff0c;一般是jdk包下的jre文件&#xff1b; 2、通过File.separator拼接运行环境的根路径及目标文件的的名称&am…

SQL查询早于到期时间的数据

遇到个需求是需要查询有效的一些数据&#xff0c;所以要以到期时间作为过滤条件&#xff0c;把到期时间大于到期时间的数据返回&#xff1b; -- 查询早于当前时间 SELECT * FROM jc_tmp t WHERE t.expiration_time > now() 可以直接用 < > 即可 到期时间是now( ) …

实战纪实 | 记一次信息泄露到未授权的挖掘

目标 开局一个登录框 打点 尝试爆破&#xff0c;无望 之后查询了一下供应商的归属&#xff0c;发现是xxxx公司 去了公司官网啾啾&#xff0c;发现了一处wiki&#xff0c;不过现在修了&#xff0c;下面是修了的截图 里面翻到了很多有趣的信息 这时候我们拿到了 a / b (分别代…

漫谈5种注册中心

01 注册中心基本概念 1.1 什么是注册中心&#xff1f; 注册中心主要有三种角色&#xff1a; 服务提供者&#xff08;RPC Server&#xff09;&#xff1a;在启动时&#xff0c;向 Registry 注册自身服务&#xff0c;并向 Registry 定期发送心跳汇报存活状态。 服务消费者&…

ideaSSM博物馆网站系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 博物馆网站系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c…

MNN Session 之 Vulkan 算子(八)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session 之维度计算&#xff08;五…

小米手机蓝牙耳机无声音AACSBC编码故障解决方案

已知环境中蓝牙耳机无声音原因 手机环境&#xff1a;Root Magisk 26.4 最新 27.0 有很多 bug 刷入其他模块会导致永久丢失Root 权限 起初我以为是将手机根目录文件变动导致&#xff0c;最终确定是由于以下模块 magisk-overlayfs3.2-release.zip 作用是解锁 System 分区可读&a…

年度水下蓝牙耳机十大名牌汇集:热销榜TOP游泳耳机揭秘!

近年来&#xff0c;随着运动健身的普及和科技的发展&#xff0c;水下蓝牙耳机逐渐成为游泳爱好者的必备装备。然而市场上各类品牌、型号繁多&#xff0c;如何选择一款适合自己且性价比高的水下蓝牙耳机呢&#xff1f; 为此&#xff0c;我们专门对市面上热销的十大水下蓝牙耳机进…

Halcon 路标牌识别

文章目录 gray_closing_shape 使用选定的掩码执行灰度值关闭create_planar_uncalib_deformable_model 为未校准的透视匹配创建一个可变形的模型get_deformable_model_params 返回可变形模型的参数find_planar_uncalib_deformable_model 在图像中寻找平面投影不变变形模型的最佳…

气压传感器BMP180的简单应用

文章目录 一、BMP1801.介绍2.主要特点&#xff1a;3. 典型应用&#xff1a;4. 原理图5. 典型应用电路6. 测量流程7. 工作模式 二、软件1.初始化2.获取原始温度3.获取真实温度4.获取原始气压5.获取真实气压6.海拔高度的换算 三、总结 一、BMP180 1.介绍 BMP180是一款高精度、小…

【考研数学】全年复习懒人包+资料分享

题主要真是能把这两样做透了&#xff0c;别说90&#xff0c;120都不是问题呀&#xff01;那么我们就先来说说你如何能把这1800做透吧。这可是人称考研数学路上最厚的一本习题册了。经常有人是做到一半就被劝退的&#xff01;假设你是挑题出来做&#xff0c;那也行&#xff0c;不…

ThreaTrace复现记录

1. 环境配置 服务器环境 需要10.2的cuda版本 conda环境 包的版本&#xff1a; python 3.6.13 pytorch 1.9.1 torch-cluster 1.5.9 torch-scatter 2.0.9 torch-sparse 0.6.12 torch-spline-conv 1.2.1 torch-geometric 1.4.3 环境bug 这里环境搭建好以后&#xff0c;就可以正…

ssm基于Vue.js的在线购物系统的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线购物系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线购物系统&#xff0c;它彻底改变了过去传统的…

【数据结构】——线性表(顺序表加链表),万字解读(加链表oj详解)

前言 由于之前存在过对两者的区别考虑&#xff0c;所以把他们放在一起来说&#xff0c;更加容易区别和理解 对于有关线性表的概念这里就不展示了&#xff0c;这里主要是介绍线性表里面的这两个结构的知识点 一.顺序表 1.顺序表介绍 顺序表的存储结构和逻辑结构都是相邻的&a…

【前端寻宝之路】学习和总结JavaScript的书写形式

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-oO1UdfWcWZUMkIDr {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

【C语言进阶篇】自定义类型:联合体和枚举

【C语言进阶篇】自定义结构体类型&#xff1a;联合体和枚举 &#x1f308;个人主页&#xff1a;开敲 &#x1f525;所属专栏&#xff1a;C语言 &#x1f33c;文章目录&#x1f33c; 1. 联合体 1.1 联合体类型的声明 1.2 联合体的特点 1.3 联合体大小的计算 2. 枚举 2.1 枚举…