sprintf用法
说明
将数据格式化转化为字符串并存储起来。
函数语法
int sprintf(char *buffer,const char *format,[argument,...]);
参数
buffer 存储的数据
format 窗体控件字符串。 有关详细信息,请参阅"格式规范"。
argument 可选自变量
locale 要使用的区域设置
头文件
其实用<iostream>就可以。
使用
%m.n在字符串的输出中,m表示宽度,字符串所占的列数;n代表实际的字符数。
%m.n在浮点数中,m代表宽度,n代表小数的位数。
在“%m.ns”中,m表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m没什么大用,还是点号后面的n用的多。
例如:sprintf (s, "%.6s%.3s", a1, a2);
sprintf 采用“*”来占用一个本来需要一个指定宽度或精度的常数数字的位置,同样,而实际的宽度或精度就可以和其它被打印的变量一样被提供出来。这同样适用于%d,%lf,%s等各种类型。
例如:
sprintf (s, "%.*s%.*s", 6, a1, 3, a2);
sprintf (s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);
注意
由于string.c_str()的返回值是 const char* 类型,故这种写法是错误的 sprintf(s1.c_str(),"%d %d\n",1,2); 会出现这样的错误:[错误] invalid conversion from 'const char*' to 'char*' [-fpermissive]
也不可以进行强制转换: sprintf((char*)s1.c_str(), "%d %d\n", 1, 2); ,在C++中,string类型的变量是不可变的,即不能直接修改其内容。而sprintf函数是用于格式化输出到字符数组的,不适用于string类型的变量。如果想要将格式化的字符串存储到string变量中,可以使用stringstream类或者to_string函数。
[警告] embedded '\0' in format [-Wformat-contains-nul]
char out[100];
int q = sprintf(out, "\0", cnt, cnt, suffix.c_str());
在这段代码中,你在格式化字符串的末尾添加了'\0',这是不必要的,因为sprintf函数会自动在字符数组的末尾添加空字符'\0'。因此,你可以去掉\0以避免警告。
返回值
spritnf 返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次 sprinf 调用结束以后,你无须再调用一次strlen 便已经知道了结果字符串的长度。
例如:int len = sprintf (s, "%d", i);