sprintf()函数 和 printf()函数

sprintf()函数 和 printf()函数

参考:C++ 中的sprintf和snprintf 函数的区别 - CSDN博客  http://blog.csdn.net/youbingchen/article/details/51980640



sprintf()函数

int sprintf(char *string,char *format,arg_list);

函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用 outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函 数将所要输出的格式送到第一个参数,然后显示输出。

snprintf()函数

int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...);

函数说明:

最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。

函数返回值:

若成功则返回欲写入的字符串长度,若出错则返回负值。

snprintf函数是sprintf的限制字符数量的一个表达。

sprintf函数返回的是实际输出到字符串缓冲中的字符个数,包括null结束符。

而snprintf函数返回的是应该输出到字符串缓冲的字符个数,所以snprintf的返回值可能大于给定的可用缓冲大小以及最终得到的字符串长度

Example:

#include <stdio.h>

#include <stdlib.h>

int main()

{

     char str[10]={0,};

     snprintf(str, sizeof(str), "0123456789012345678");

     printf("str=%s/n", str);

     return 0;

}

总结

sprintf可能导致缓冲区溢出问题而不被推荐使用,所以在项目中我一直优先选择使用snprintf函数,虽然会稍微麻烦那么一点点。这里就是sprintf和snprintf最主要的区别:snprintf通过提供缓冲区的可用大小传入参数来保证缓冲区的不溢出,如果超出缓冲区大小则进行截断。但是对于snprintf函数,还有一些细微的差别需要注意。

原文地址:https://www.cnblogs.com/hhxxgdd/p/8414667.html

时间: 2024-11-08 21:42:25

sprintf()函数 和 printf()函数的相关文章

linux中fflush函数和printf函数 【转】

本文转载自:http://blog.chinaunix.net/uid-30058258-id-5029847.html printf是一个行缓冲函数printf函数是标准函数,最终会调用到系统调用函数,printf函数会掉用到write系统函数:但是调用write函数需要满足一些条件件.(1)缓冲区满(2)遇到\n \r(3)调用fflush函数来冲洗缓冲区(4)scanf读取缓冲区的内容(5)调用printf函数的进程或线程结束会调用fflush函数检测缓冲区的大小为1024B.fflush

scanf函数与printf函数用法

一开始学习就是用的cin.cout,所有习惯用这个,但是后来做题发现这样的输入方式有弊端,所以决定整理熟悉一下scanf函数与printf函数. 头文件 # include <stdio.h> scanf("输入控制符",输入参数) 在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记. scanf 中双引号内,除了“输入控制符”外什么都不要写. “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应. “输入控制符”的类型和变量所定义

scanf函数和printf函数

C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符:  d格式符:用来输出一个有符号的十进制整数  c格式符:用来输出一个字符  s格式符:用来输出一个字符串 f格式符:用来输出实数(包括单精度,双精度,长双精度) 隐含输出六位小数  e格式符:用格式声明%e指定以指数形式输出实数  i格式符:作用与d格式符相同,一般习惯用%d,而少用%i.  o格式符:以八进制的形式输出  u格式符:用来输出无符号(

STM32 的 printf() 函数串口重定向(HAL库标准库都适用)

1.建立工程 2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去 #include "stdio.h" #include "stm32f1xx_hal.h" extern UART_HandleTypeDef huart1; uint8_t ch; uint8_t ch_r; //重写这个函数,重定向printf函数到串口 /*fputc*/ int fputc(int c, FILE * f) { ch=c; HAL_UART

fscanf函数和fprintf函数、fgets函数和fputs函数、fread函数和fwrite函数

1. fscanf 函数和 fprintf 函数 1.1 fscanf 函数 fscanf 函数只能从文本文件中按格式输入.fscanf 函数和 scanf 函数相似,只是输入的对象是磁盘上文本文件的数据.函数的调用形式如下: fscanf( 文件指针,格式控制字符串,输入项表 ); 例如,若文件指针 fp 指向一个已打开的文本文件,a.b 分别为整型变量,则以下语句从 fp 所指的文件中读入两个整数放入变量 a 和 b 中: fscanf( fp, "%d%d", &a, &

php中sprintf与printf函数用法区别

下面是一个示例:四舍五入保留小数点后两位 <?php $num1 = 21; echo sprintf("%0.2f",$num1)."<br />"; //输出 21.00 $num2 = 16.3287; echo sprintf("%0.2f",$num2)."<br />"; //输出 16.33 $num3 = 32.12329; echo sprintf("%0.2f&quo

学C第5天(printf函数,scanf函数)

一.格式 1.%d格式 %[-]d      左对齐     %[m]d      以m指定的字段宽度输出,数据的位数小于m,左端补空格     %[0m]d     以m指定的字段宽度输出,数据的位数小于m,则左端补0     %[l]d    输出长整型整数     %[-m]d  左对齐,忽视0或空格 int num = 1000;     printf("%-d", num);//1000     printf("\n%10d", num); //     

printf函数重定向

printf函数底层会调用fputc函数 /*重定向c库函数printf到USART1*/ int fputc(int ch, FILE *f) { /*发送一个字节数据USART1 */ USART_SendData(DEBUG_USART, (uint8_t) ch); /* 等待发送完毕 */ while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TXE) == RESET); return (ch); }

对于printf函数和C语言编程的初步拓展

前面说过了,任何程序都要有输出,所以printf函数是一个很重要的函数,所以有必要在学变量之前先拓展一下. 其实编程就是用计算机语言说话,一句一句地说,只要语法没错就能运行,至于能实现什么功能,就看编程者的水平了. 那么看一下下面的代码 #include<stdio.h> int main(void) { printf("hello world"); printf("hello world"); return 0; } 你觉得运行的结果在屏幕上会显示什么