一、概述
cstring.format函数是C++语言中非常常用的字符串格式化函数之一,可以将一组参数按照一定的格式输出到字符串中。
该函数定义如下:
int snprintf(char *str, size_t size, const char *format, ...);
其作用是将一组参数(format之后的参数)按照format参数中的格式输出到字符串str中,最多输出size个字符,返回实际输出的字符数。
二、使用方法
cstring.format函数的使用非常简单,只需要设置好参数即可。其中,第一个参数是输出的目的地字符串,第二个参数是目的地字符串的最大长度,第三个参数是格式化字符串,之后的参数是要输出的参数,按照格式化字符串中的占位符进行替换。
占位符的形式为 % + 字符,其中常用的字符有:d(10进制整数),u(10进制无符号整数),o(8进制整数),x(16进制整数),c(char),s(string)等。
以下是一个例子:
#include <cstring> #include <iostream> using namespace std; int main() { char output[100]; sprintf(output, "My name is %s, my age is %d.", "Tom", 18); cout << output << endl; return 0; }
上面的代码中,输出的字符串是"My name is Tom, my age is 18."。
三、常见问题
1、格式化字符串中的转义字符
格式化字符串中可能含有%n、%t等转义字符,这时候需要使用%%表示一个百分号。
例如:
char output[100]; sprintf(output, "My salary is %d%%.", 10);
输出的字符串是"My salary is 10%."。
2、输出的字符数大于目的地字符串长度
如果输出的字符数大于目的地字符串长度,则会截断目的地字符串,只将前面的字符输出。所以需要保证目的地字符串的长度足够长,以免数据丢失。
3、不同平台的格式化字符串
在不同的平台上,格式化字符串的实现可能有所不同,因此需要注意使用不同平台的兼容性问题。
四、实例代码
#include <iostream> #include <cstdio> using namespace std; int main() { char output[100]; sprintf(output, "%05d", 10); printf("%s\n", output); sprintf(output, "%.2f", 1.2345); printf("%s\n", output); sprintf(output, "%c", 'a'); printf("%s\n", output); return 0; }