在 C 中创建格式化字符串
本文讨论如何使用 C 语言格式化字符串,就像我们在 printf()
函数中所做的那样 - 例如,通过组合字符串文字和不同变量的值生成一个字符串,并将结果分配给一个字符串变量 未来使用。
C 语言有一些内置的库方法可以返回格式化的字符串。 其中最常用的两个函数是:
-
sprintf()
方法 -
snprintf()
方法
我们将讨论这两个函数及其示例。
使用 C 中的 sprintf() 函数创建格式化字符串
sprintf()的原型如下:
int sprintf ( char * str, const char * format, ... );
如果在 printf 上使用该格式,则字符串内容将作为 C 字符串存储在 str 引用的缓冲区中,而不是打印出来。 缓冲区大小应该足够大以容纳完整的结果字符串。
在内容之后,自动插入一个空字符。
该函数至少需要与此函数第二个参数中使用的格式说明符完全一一对应所需的额外参数。
参数
-
char * str
它是一个字符指针,将存储结果字符串。 这个指针的大小应该足够大以适应格式中指定的所有数据。
-
const char * format
它也是一个字符指针,包含我们在 printf 函数中指定的所有规范的字符串格式。
-
...
该函数可能需要一组附加参数,每个参数都包含一个值以替换格式字符串中的格式说明符,具体取决于格式字符串(或指向存储位置的指针,对于 n)。
这些参数的数量至少应等于格式说明符中指示的值的数量。 该函数忽略任何其他参数。
返回值
此函数返回一个 int 值,指定写入结果字符串中的字符数。 此字符数不包括自动附加在字符串末尾的空字符。
如果出现错误或该字符串上未写入任何内容,则返回负数。
例子:
#include <stdio.h>
int main ()
{
char arr [60];
int num, i=4, j=2;
num = sprintf (arr, "%d plus %d is %d", i, j, i+j);
printf ("[%s] string is %d characters long\n",arr,num);
return 0;
}
上述代码的输出是:
[4 plus 2 is 6] string is 13 characters long
在上面的代码片段中,您可以看到我们声明了一个固定大小的字符数组。 然后我们在 sprintf 函数中使用该数组来保存内容。
比如 sprintf
函数中的格式字符串超过指定数组的大小,就会出现内存错误,程序就会异常终止。 此函数的一个更安全的版本用于避免这种麻烦,即 snprintf 函数。
使用 C 中的 snprintf() 函数创建格式化字符串
该函数的原型如下:
int snprintf ( char * s, size_t n, const char * format, ... );
如果在 printf 上使用该格式(将 n 作为要填充的最大缓冲区容量),则字符串内容作为 C 字符串存储在 s 指向的缓冲区中,而不是打印出来。
如果在这种情况下,结果字符串的大小大于 n-1,则所有多余的剩余字符都将被丢弃,但将计入返回值中的字符数。
材料写入后,自动附加一个空字符。
该函数至少需要格式参数后格式所需的额外参数。
参数
-
char * s
它是一个字符指针,用于保存结果字符串的内容。 此数组的大小应至少为 n 个字符长。
-
size_t n
它是一个无符号整数类型,指示要写入缓冲区的最大字符数。 可以写入的最大字符数为 n-1,为字符串末尾附加的空字符留出一个字符。
-
const char * format
它也是一个字符指针,包含我们在 printf 函数中指定的所有规范的字符串格式。
-
...
该函数可能需要一组附加参数,每个参数都包含一个值以替换格式字符串中的格式说明符,具体取决于格式字符串(或指向存储位置的指针,对于 n)。
这些参数的数量至少应等于格式说明符中指示的值的数量。 该函数忽略任何其他参数。
返回值
此函数返回缓冲区中成功写入的字符数,不包括终止空字符。 如果出现任何错误,它会返回一个负数。
请注意
,如果返回值大于 0 且小于指定的缓冲区大小,则字符串已完全写入。
例子:
#include <stdio.h>
int main ()
{
char arr [100];
int count;
count = snprintf ( arr, 100, "The double of %d is %d", 5, 5*2 );
if (count>=0 && count<100) // check returned value
printf ("The resultant string is: %s" , arr);
else
printf("Not successfully written");
return 0;
}
输出:
The resultant string is: The double of 5 is 10
相关文章
在 C 语言中使用 typedef enum
发布时间:2023/05/07 浏览次数:181 分类:C语言
-
本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。
C 语言中的 extern 关键字
发布时间:2023/05/07 浏览次数:114 分类:C语言
-
本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量
C 语言中的 #ifndef
发布时间:2023/05/07 浏览次数:186 分类:C语言
-
本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。