一、sprintf()
- 头文件:#include <stdio.h>
- 作用:将一个格式化的字符串输出到一个目的字符串中,
- 原型:int sprintf(char *str, char * format [, argument, ...]);
- 参数:str为要写入的字符串;format为格式化字符串,与printf()函数相同;argument为变量。
- 返回值:成功则返回参数str 字符串长度,失败则返回-1,错误原因存于errno 中(但在测试中返回的是实际传入参数的长度)
char buf[5];
int ret = sprintf(buf, "%d", 1234);
printf("%d,%s", ret, buf); //output 4,1234
char buf[5];
int ret = sprintf(buf, "%d", 12345);
printf("%d,%s", ret, buf); //output 5,12345,then terminated
- 二、snprintf()
- 作用:将格式化的数据写入字符串
- 原型:int snprintf(char *str, int n, char * format [, argument, ...]);
- 参数:str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断(避免缓冲区溢出);format为格式化字符串,与printf()函数相同;argument为变量。
- 返回值:成功则返回参数str 字符串长度,失败时VC返回-1,GCC返回实际传入参数的长度,错误原因存于errno 中。
char buf[5];
int ret = snprintf(buf, 5, "%d", 1234);
printf("%d,%s", ret, buf); //output 4,1234
char buf[5];
int ret = snprintf(buf, 5, "%d", 123456);
printf("%d,%s", ret, buf); //output 6,1234
- 注意:在GCC中,函数名称为snprintf(),而在VC中称为_snprintf()。二者区别在于参数n
- GCC中的参数n表示向str中写入n个字符,包括'\0'字符,并且返回实际的字符串长度。
- VC中的参数n表示会向str中写入n个字符,不包括'\0'字符,并且不会在字符串末尾添加'\0'符。当字符串长度超过参数n时,函数返回-1,以表示可能导致错误。