一、sprintf、snprintf
#include <stdio.h>
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
sprintf
演示案例
#include <stdio.h> int main() { char buff[100]; sprintf(buff,"I am C"); printf("%s\n",buff); return 0; }
#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; }
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; }
sprintf与snprintf函数的选择使用
二、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;
}