C/C++ snprintf()
时间:2020-02-23 14:32:06 来源:igfitidea点击:
在本文中,我们将了解snprintf()C++函数的工作和用法。
snprintf()函数用于将格式化的输出写入字符串。
通过显示其语法并提供示例,来了解如何使用此功能。
C/C++中snprintf()的基本语法
由于snprintf()函数将写入字符串缓冲区,因此它将字符串作为参数,以及格式化的字符串。
格式化的字符串是任何包含格式说明符的字符串,例如%d,%c或者%s。
这类似于printf()
或者cout
,不同的是它将写入一个字符串。
基本功能签名如下:
int snprintf (char* buffer, size_t buf_size, const char* format);
其中" buffer"是我们将写入的字符串缓冲区,最大容量为" buf_size"。
format是我们将写入缓冲区的格式字符串。
注意:缓冲区是一个字符数组(" char *"),而不是一个"字符串"。
这是因为这是C兼容函数,并且C没有string
类。
如果执行成功,如果没有问题,它将返回已写入的字符数。
否则,它将返回一个负整数。
如果缓冲区大小太小,则输入字符串将被截断为缓冲区大小。
与printf()
类似,这是在<stdio.h>中定义的库函数。
#include <stdio.h> int snprintf (char* buffer, size_t buf_size, const char * format);
现在让我们看一下此功能的一些示例。
在C/C++中使用snprintf()
我们将使用包含一些整数和字符串的格式字符串,并将其写入缓冲区。
假设采用以下格式的格式字符串:
Hello %s, your roll number is %d.
现在,我们将使用snprintf()将其写入缓冲区。
#include <stdio.h> int main() { //Allocate stack memory for our buffer char buffer[256]; char name[20] = "Amit"; int num_read = snprintf(buffer, sizeof(buffer), "Hello %s, your roll number is %d", name, 10); if (num_read < 0) { fprintf(stderr, "Error while writing to buffer\n"); return -1; } printf("Buffer written successfully!\nNumber of characters read: %d\nContent of buffer: %s\n", num_read, buffer); return 0; }
输出
Buffer written successfully! Number of characters read: 33 Content of buffer: Hello Amit, your roll number is 10
如您所见,我们的缓冲区确实已使用格式字符串内容进行了更新!
让我们以另一种情况为例,当您尝试编写一个对于我们的缓冲区来说太大的字符串时。
其中让我们将缓冲区的大小设为20,然后尝试看看会发生什么。
#include <stdio.h> int main() { //Allocate stack memory for our buffer char buffer[20]; char name[20] = "Amit"; int num_read = snprintf(buffer, sizeof(buffer), "Hello %s, your roll number is %d", name, 10); if (num_read < 0) { fprintf(stderr, "Error while writing to buffer\n"); return -1; } printf("Buffer written successfully! Number of characters read: %d, Content of buffer: %s\n", num_read, buffer); return 0; }
输出
Buffer written successfully! Number of characters read: 34, Content of buffer: Hello Amit, your ro
即使我们读取的字符数与以前一样(34),由于缓冲区大小不够大,因此格式字符串会减小为缓冲区大小。
因此,我们的输出仅包含20个字符,与缓冲区的大小相同。