`
luliangok
  • 浏览: 816652 次
文章分类
社区版块
存档分类
最新评论

打印字符串的安全函数snprintf

 
阅读更多

在读UNIX网络编程时,有这样一段:

“If you're not already in the habit of using snprintf instead of the older sprintf, now's the time to learn. Calls to sprintf cannot check for overflow of the destination buffer. snprintf, on the other hand, requires that the second argument be the size of the destination buffer, and this buffer will not overflow.

snprintf was relatively late addition to the ANSI C standard, introduced in the version referred to as ISO C99. Virtually all vendors provide it as part of the standard C library, and many freely available versions are also available. We use snprintf throughout the text, and we recommend using it instead of sprintf in all your programs for reliability.

It is remarkable how many network break-ins have occurred by a hacker sending data to cause a server's call to sprintf to overflow its buffer. Other functions that we should be careful with are gets, strcat, and strcpy, normally calling fgets, strncat, and strncpy instead. Even better are the more recently available function strlcat and strlcpy, which ensure the result is a properly terminated string. Additional tips on writing secure network programs are found in Chapter 23 of [Garfinkel, Schwartz, and Spafford 2003].”

其主要说的是缓冲区溢出问题,为给缓冲区一个固定的长度,我们需要给这个函数某些限定。

下列代码在VS2005调试通过。


分享到:
评论

相关推荐

    安全函数strcpy_s、strncpy_s、snprintf_s、memcpy_s

    在IT行业中,安全是至关重要的,特别是在处理字符串和内存操作时。传统的C语言函数如`strcpy`, `strncpy`, `sprintf`, 和 `memcpy`虽然功能强大,但它们缺乏对缓冲区溢出的安全检查,这可能导致严重的安全漏洞。为了...

    数值转字符串函数

    ### 数值转字符串函数知识点详解 #### 一、概述 在计算机编程中,经常需要将数值类型(如整数或浮点数)转换为字符串类型,以便于进行文本处理、输出展示或者网络传输等操作。本文将详细介绍两个用于实现这种转换...

    字符串拷贝,最好用snprintf。

    `snprintf`函数的功能非常强大且灵活,它可以将多个值按照指定格式插入到字符串中,并安全地写入到大小固定的缓冲区中。它会在指定的缓冲区大小范围内生成字符串,并确保结果字符串总是以`\0`结尾,即使缓冲区大小不...

    c字符串解析处理功能函数集

    - 虽然不是标准C字符串函数,但`sprintf`或`snprintf`可用于将格式化的数据转换成字符串,类似于C++的`std::stringstream`。 9. **安全操作**: - `strncpy_s` 和 `strcpy_s`(Microsoft扩展):提供边界检查的...

    字符串拷贝函数.docx

    除了这两个函数,`snprintf`也是一个有用的字符串处理函数,它不仅能够拷贝字符串,还能进行格式化输出。`snprintf`的函数原型如下: ```c int snprintf(char *str, size_t size, const char *format, ...); ``` `...

    字符串拷贝函数.pdf

    `snprintf`函数接受一个格式化字符串和相应的参数,然后将结果写入目标字符串。这在需要格式化输出或者混合数据类型转换为字符串时非常有用。例如: ```c int num = 42; char str[10]; snprintf(str, sizeof(str), ...

    使用C++实现的字符串拼接函数的实现及讨论详解.docx

    c 字符串拼接C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'。字符串结尾处默认带'\0'。 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数。 一 、snprint数...

    一个C语言常用字符串操作函数库.zip

    下面将详细解释一些常见的C语言字符串函数及其用途。 1. **strcpy()** 和 **strncpy()**: 这两个函数用于复制字符串。`strcpy()` 直接将源字符串复制到目标字符串,不检查长度,因此可能会导致溢出问题。`strncpy()...

    使用C++实现的字符串拼接函数的实现及讨论.docx

    c 字符串拼接C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'。字符串结尾处默认带'\0'。 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数。一 、snprint数的...

    字符串拷贝函数 (2).docx

    最后,`snprintf`函数是一个更复杂的字符串处理函数,它不仅用于拷贝,还能进行格式化输出。`snprintf`的原型如下: ```c int snprintf(char* str, size_t size, const char* format, ...); ``` 在这里,`str`是...

    C++常用库函数 缓冲区操作函数、字符分类函数、数据转换函数、数学函数、输入和输出函数、进程控制函数、字符串操作函数

    本文将详细探讨C++中的几个主要库函数类别:缓冲区操作函数、字符分类函数、数据转换函数、数学函数、输入和输出函数、进程控制函数以及字符串操作函数。 1. **缓冲区操作函数** - `memchr`:这个函数用于在内存块...

    理解snprintf()函数

    在这段代码中,我们使用snprintf()格式化不同长度的字符串,并打印出字符串的实际长度、内容和函数的返回值。 需要注意的是,在使用snprintf()时,应当确保传入的数组有足够的空间来存放输出的字符串以及结尾符'\0'...

    C语言浮点数转字符串_C语言浮点数字符串_浮点数转换_

    除此之外,C99标准引入了`<tgmath.h>`库中的`asnprintf`函数,它提供了一种安全的方式来动态分配内存来存储转换后的字符串,特别是在不知道浮点数长度的情况下非常有用: ```c #include #include #include int ...

    字符串拷贝函数 (2).pdf

    这个函数简单直观,使用方便,但在没有提供长度控制的情况下,如果源字符串和目标字符串重叠或者目标字符串内存不足,可能会导致安全问题。 `snprintf`函数,原型为`int snprintf(char *str, size_t n, const char ...

    clib字符串函数使用

    本篇文章将深入探讨clib中的字符串函数,包括它们的功能、用法以及在实际编程中的应用。 1. `strlen()` 函数: 这个函数用于计算字符串的长度,不包括结束的空字符'\0'。例如: ```c char str[] = "Hello, World...

    整型转字符串函数itoa

    尽管标准 C 库提供了如 `sprintf()` 或 `snprintf()` 这样的函数来实现这一功能,但在某些情况下,为了更深入地理解转换过程或出于性能考虑,编写一个自定义的整型转字符串函数显得非常必要。本文档将详细解析一个...

    字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较

    再来看`snprintf`,这是一个格式化输出函数,可以用来安全地拷贝字符串。`snprintf`会确保输出不超过指定缓冲区的大小,并自动添加字符串结束符。在测试中,`snprintf`的性能优于`strncpy`,但略逊于`memcpy`。这是...

    c语言中所有字符串函数使用手册

    C语言标准库提供了多个字符串处理函数,使得我们能够方便地操作和管理字符串。本手册详细介绍了这些函数的使用方法,涵盖从基本的字符串复制、比较到复杂的查找、转换等多个方面。 1. `strcpy()` 和 `strncpy()` ...

    C语言字符串数字提出.zip

    在C语言中,字符串是由字符组成的数组,而从字符串中提取数字则需要运用到字符串处理函数和数值转换函数。下面我们将深入探讨这些知识点。 首先,字符串在C语言中通常以字符数组的形式存在,其结尾由一个特殊的字符...

    链接任意多个字符串

    4. **使用`sprintf()`/`snprintf()`**:在C语言中,可以利用格式化输出函数来实现字符串的拼接。 5. **自定义循环或递归方法**:对于连接任意多个字符串,我们可以编写一个循环或递归函数,依次将每个字符串添加到...

Global site tag (gtag.js) - Google Analytics