首页 > 其他分享 >c里面的printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s一问说清所有各种printf

c里面的printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s一问说清所有各种printf

时间:2024-10-19 14:59:03浏览次数:1  
标签:restrict const snprintf ... format char fprintf printf

都定义在<stdio.h>中,有些事C99的一部分,有些事C11新加的。如下:

int printf( const char*          format, ... ); (until C99)
int printf( const char* restrict format, ... ); (since C99)
  (2)  
int fprintf( FILE*          stream, const char*          format, ... ); (until C99)
int fprintf( FILE* restrict stream, const char* restrict format, ... ); (since C99)
  (3)  
int sprintf( char*          buffer, const char*          format, ... ); (until C99)
int sprintf( char* restrict buffer, const char* restrict format, ... ); (since C99)
int snprintf( char* restrict buffer, size_t bufsz,
              const char* restrict format, ... );
(4) (since C99)
int printf_s( const char* restrict format, ... ); (5) (since C11)
int fprintf_s( FILE* restrict stream, const char* restrict format, ... ); (6) (since C11)
int sprintf_s( char* restrict buffer, rsize_t bufsz,
               const char* restrict format, ... );
(7) (since C11)
int snprintf_s( char* restrict buffer, rsize_t bufsz,
                const char* restrict format, ... );
(8) (since C11)

各个gcc编译器版本对c标准的支持情况参见这里

规则为:普通的printf就是打印,sprintf就是格式化用途、叫做messageformat更合适。fprintf就是指定流而不是使用stdout标准流。带n版本为指定长度。带s的版本为所谓的安全版。

所以简单一点,格式化就用snprintf,写文件就用fprintf。

对应printf还有wprintf,vprintf,w\v代替f。w是宽字符。v版本和非v版本的区别在于,v版本自己管理可变参数。如下:

The functions vprintf(), vfprintf(), vdprintf(), vsprintf(),
       vsnprintf() are equivalent to the functions printf(), fprintf(),
       dprintf(), sprintf(), snprintf(), respectively, except that they
       are called with a va_list instead of a variable number of
       arguments.  These functions do not call the va_end macro.
       Because they invoke the va_arg macro, the value of ap is
       undefined after the call.

带_s是所谓的安全版本,c11标准的一部分,会检查参数,由宏__STDC_WANT_LIB_EXT1__控制。参见https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/compiler_security/C11_secure_functions.html,https://docs.oracle.com/cd/E88353_01/html/E37843/snprintf-s-3c.html

参考:https://en.cppreference.com/w/c/io/fprintf

https://www.man7.org/linux/man-pages/man3/vsnprintf.3.html

标签:restrict,const,snprintf,...,format,char,fprintf,printf
From: https://www.cnblogs.com/lightdb/p/18475882

相关文章

  • C++ 基础-面试题02(final和override关键字、sizeof和strlen区别、strcpy、sprintf 与me
    1.final和override关键字在C++中,final和override关键字是在面向对象编程中用于处理类的继承和多态的。它们主要用于管理派生类和虚函数,提供额外的安全性和代码可读性,防止意外的函数重写或错误的重载行为。1.final关键字final关键字用于防止进一步的继承或函数重......
  • C语言之printf的解析
    一、前言我们学习程序开发的第一个编程基本就是输出。下面我们学习一下的输出函数printf并学习。二、项目实践1.引入库文件#include<stdio.h>2.标准输出标准格式:printf(格式控制字符串,输出列表);#include<stdio.h>intmain(){ printf("helloworld\n"); return0;}执行程......
  • C语言-常见文件操作函数详解(fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite)
     ......
  • 【STC15】实现printf()重定向的相关问题
    本文前提:读者已经知道如何用STC15实现串口重定向的基础知识(大体思路和代码大意)。如果不知道,请移步:《STC15单片机-串口打印》:https://blog.csdn.net/weixin_46251230/article/details/126679956问题1:uint8_t 数字增长显示错误/*Privatevariables-------------------------......
  • System.out.printf
    程序示例:importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){System.out.print("请输入你的名字:");Scannerin=newScanner(System.in);Stringname=in.nextLine();System.out.print(&......
  • 1068:与指定数字相同的数的个数 【printf和scanf的非常正常用法】
    【题目描述】输出一个整数序列中与指定数字相同的数的个数。输入包含2行:第1行为N和m,表示整数序列的长度(N<=100)和指定的数字;第2行为N个整数,整数之间以一个空格分开。输出为N个数中与m相同的数的个数。【输入】第1行为N和m,表示整数序列的长度(N<=100)和指定的数字,中间用一个空......
  • sprintf_s strcat_s
    strcat_s函数原理:dst内存空间大小=目标字符串长度+原始字符串场地+‘\0’;获取内存空间大小使用sizeof函数(获取内存空间大小);获取字符串长度使用strlen函数(查字符串长度charsrc[1024]={"C/C++教程-strcat_s函数"};chardst[1024]={"www.codersrc.com"};//注意:str......
  • 【GESP】C++一级练习BCQM3005,基本输出语句printf
    一道基础练习题,练习基本输出语句printf。BCQM3005题目要求描述输出表达式1234∗5678的结果。输入无输出1234∗5678=7006652输入样例无输出样例1234*5678=7006652全文详见个人独立博客:https://www.coderli.com/gesp-1-bcqm3005/【GESP】C++一级练习B......
  • fmt.Printf 函数用于格式化并打印信息到标准输出
    在Go语言中,fmt.Printf函数用于格式化并打印信息到标准输出。%c和%d是格式化参数中的占位符,用于指定输出的格式。以下是一些常用的格式化参数:%v:默认格式,根据变量的类型自动选择输出格式。%+v:类似 %v,但会输出字段名。%#v:类似 %v,但会输出Go语法表示。%T:输出变量的类型......
  • C语言学习——sprintf函数详细解释及其用法
    文章目录函数功能:把格式化的数据写入某个字符串参数说明及应用举例解释:连接字符串打印地址信息利用sprintf的返回值使用sprintf的常见问题函数功能:把格式化的数据写入某个字符串头文件:stdio.h函数原型:intsprintf(char*buffer,constchar*format,[arg......