0
点赞
收藏
分享

微信扫一扫

Linux(程序设计):16---sprintf、snprintf、sscanf


一、sprintf、snprintf

#include <stdio.h>

int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);


sprintf


功能:​发送格式化输出到​str​所指向的字符串​返回值:​成功返回后,这些函数返回打印的字符数(不包括用于将输出结束为字符串的空字节);如果遇到输出错误,则返回一个负值

演示案例

#include <stdio.h> int main() { char buff[100]; sprintf(buff,"I am C"); printf("%s\n",buff); return 0; }

Linux(程序设计):16---sprintf、snprintf、sscanf_字符串

#include <stdio.h> int main() { char buff[100]; char *s="I am C"; int age=18; sprintf(buff,"%s,my age is %d",s,age); printf("%s\n",buff); return 0; }

Linux(程序设计):16---sprintf、snprintf、sscanf_字符串长度_02



snprintf


  • 功能:​与sprintf功能相同。
  • 使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以考虑使用snprintf函数,该函数可对写入字符数做出限制
  • 返回值:​与sprintf不同,snprintf若成功则返回预写入的字符串长度,若出错则返回负值

参数2:


  • 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
  • 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0'),返回值为欲写入的字符串长度

演示案例

#include <stdio.h> int main () { char a[16]; size_t i; i = snprintf(a, 13, "%012d", 12345); printf("i = %lu, a = %s\n", i, a); i = snprintf(a, 9, "%012d", 12345); printf("i = %lu, a = %s\n", i, a); return 0; }

Linux(程序设计):16---sprintf、snprintf、sscanf_#include_03



sprintf与snprintf函数的选择使用

Linux(程序设计):16---sprintf、snprintf、sscanf_#include_04


二、sscanf

#include <stdio.h>

int sscanf(const char *str, const char *format, ...);

  • 功能:​从str所指向的字符串读取格式化输入
  • 返回值:​如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF

演示案例:

#include <stdio.h>
#include <string.h>

int main ()
{
int day,year;
char date[100],weekday[20],month[20];

strcpy(date,"Saturday September 25 2019");
sscanf(date,"%s %s %d %d",weekday,month,&day,&year);

printf("%d %s %s %d\n",year,month,weekday,day);
return 0;
}

Linux(程序设计):16---sprintf、snprintf、sscanf_字符串长度_05


举报

相关推荐

0 条评论