sprint
头文件:#include<stdlib.h>
C 库函数 int sprintf(char *string, char *format [,argument,…]);
用途:
该函数可以将不同类型的多个数据序列化的写入一个字符串buff中,比起strcat(连接两个字符串)函数将会是更加的方便快捷。
返回值 int :
该函数的返回值为int,写入成功时,返回的是写入的buff的字符个数。写入失败时返回一个负数。
参数列表:
string– 这是指向一个字符数组的指针,该数组存储了 C 字符串。
format– 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是%[flags][width][.precision][length]specifier
[argument]….:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。这里与我们使用scanf,printf的情景是一样的,即(“%d %s ”,int,string)的写入形式。
例如:
char str[100];
int j;//记录返回值
j=sprintf(str,"%s","hello");//将hello写入字符串str中。
printf("%s\n j=%d\n",str,j);
j=sprintf(str,"%d",10);//将整数10以字符串得形式写入str中。
printf("%s\n j=%d\n",str,j);
j=sprintf(str,"%d%s",10,"hello");//将字符串hello 和整数10按顺序写入str中
printf("%s\n j=%d",str,j);
return 0;
运行结果:

覆盖问题
由上面的运行结果可以看出,sprintf可以很便捷的将不同类型的数据以字符串的形式写入一个字符串中,
我们分析一下上面的结果:
第一次写入hello:str=“hello”;
第二次写入10:str=“10”;
第三次写入10hello: str=“10hello”;
可以看出每一次的写入都覆盖了原来字符串中的数据。
注意:
将多个数据写入一个字符串时应注意覆盖问题。尽量一次性写入,分开写入时不细心就可能出现覆盖问题。例:
int main()
{
//一次性写入
char str[100];
int i=10;
float f=1.234;
char* s="hello";
sprintf(str,"%d%f%s",i,f,s);//将多个数据同时写入str
printf("%s",str);
return 0;
}
结果为:

int main()
{
//正确的分开写入
char str[100];
char* s="hello";
int i=10,j;//记录返回值
float f=1.234;
j=sprintf(str,"%d",i);//将hello写入字符串str中。
j+=sprintf(str+j,"%f",f);//将整数10以字符串得形式写入str中。
j+=sprintf(str+j,"%s",s);//将字符串hello 和整数10按顺序写入str中
printf("%s",str);
return 0;
}
结果为:

分开写入时出错的情景:

str最终被覆盖为“hello”,与预期结果不同。
sscanf
c库函数 int sscanf(const char *str, const char format, …) 从字符串读取格式化输入。
用途:
从一个字符串读取格式化的输入。
参数:
str – 这是 C 字符串,是函数检索数据的源。
format – 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为 [=%[][width][modifiers]type=]
返回值int:
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
这里我们通过下面的例子具体说明下该函数的用法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
int i= sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
printf("成功赋值个数:%d",i);
return(0);
}
运行结果:

以上就是sscanf与sprintf的具体用法,掌握了这两个函数将对我们解决字符串方面的问题有巨大的便利,我们要灵活使用。
to_string
函数原型:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
功能:
将数值转化为字符串。返回对应的字符串。
例子:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string pi = "pi is " + std::to_string(3.1415926);
string perfect = to_string(1 + 2 + 4 + 7 + 14) + " is a perfect number";
cout << pi << '\n';
cout << perfect << '\n';
system("pause");
return 0;
}
本文介绍了C语言中sprintf、sscanf和to_string函数。sprintf可将不同类型数据序列化写入字符串,使用时要注意覆盖问题;sscanf用于从字符串读取格式化输入;to_string能将数值转化为字符串。掌握这些函数对解决字符串问题有很大帮助。
4901

被折叠的 条评论
为什么被折叠?



