#include <stdio.h>
#include <string.h>
typedef unsigned char uchar;
#define BUF_SIZE 10 // 缓冲区大小
#define CLEAR_SIZE (BUF_SIZE+2) // 操作的缓冲区大小, 需要全部重置
void printRuler(int len)
{
putchar('\n');
for(int i = 1; i <= len; i++)
{
printf("%02d ", i);
if(i == BUF_SIZE)
printf("\t|\t");
}
putchar('\n');
}
void dis(char *buf, int len)
{
for(int i = 0; i < len; i++)
{
printf("%02x ", (uchar)buf[i]);
if(i == BUF_SIZE - 1)
printf("\t|\t");
}
// puts("\n"); // 另起一行输出字符串并换行, 不会接在原来的后面
putchar('\n'); // 直接输出字符
printf("buf=[%s]\n\n", buf);
}
int main()
{
char buf[BUF_SIZE];
memset(buf, 0xcc, CLEAR_SIZE);
dis(buf, CLEAR_SIZE);
printRuler(CLEAR_SIZE);
printf("-------------------------------------- snprintf\n");
memset(buf, 0xcc, CLEAR_SIZE);
snprintf(buf, BUF_SIZE, "%s", "12345678"); // 未溢出
dis(buf, CLEAR_SIZE);
memset(buf, 0xcc, CLEAR_SIZE);
snprintf(buf, BUF_SIZE, "%s", "123456789"); // 未溢出, 刚好填满
dis(buf, CLEAR_SIZE);
memset(buf, 0xcc, CLEAR_SIZE);
snprintf(buf, BUF_SIZE, "%s", "123456789A"); // 未溢出, 被截断1个字符
dis(buf, CLEAR_SIZE);
memset(buf, 0xcc, CLEAR_SIZE);
snprintf(buf, BUF_SIZE, "%s", "123456789AB"); // 未溢出, 被截断2
关于sprintf和snprintf的比较
最新推荐文章于 2024-07-10 19:02:49 发布
本文探讨了在GNUMake(Windows)和Linux环境下,sprintf与snprintf函数的使用和差异,重点在于安全性与内存管理方面。
摘要由CSDN通过智能技术生成