sprintf用法

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, "![%05d](assets\\%05d%s)\0", cnt, cnt, suffix.c_str());

在这段代码中,你在格式化字符串的末尾添加了'\0',这是不必要的,因为sprintf函数会自动在字符数组的末尾添加空字符'\0'。因此,你可以去掉\0以避免警告。

返回值

spritnf 返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次 sprinf 调用结束以后,你无须再调用一次strlen 便已经知道了结果字符串的长度

例如:int len = sprintf (s, "%d", i);

posted @ 2025-11-26 23:21  H_Elden  阅读(31)  评论(0)    收藏  举报