`
futrueboy
  • 浏览: 84897 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用strncpy_s 比 使用strncpy更加安全

阅读更多
以下使用strncpy 但不安全
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>

int main (int argc, char *argv[])
{
	char *p = "hello who you are ? ";
	char *dest;
	char s[20];
	int valLen;
	
	dest = (char *) malloc (sizeof (char) * 1000);

	//if we use strncpy_s we will get assert
	//for the size is not enough
	//we can just change s[20] to s[21]
	/*
	strncpy_s(s, _countof(s), p, strlen(p));
	printf("%s\n", s);
	*/


    // Here we use strncpy and get null termination
	strncpy (dest, p, (valLen = strlen(p)));
	dest[valLen] = '\0';
	printf ("%s\n", dest);

	//system ("pause");
	return 0;
}

以下用strncpy 我们认为它更安全
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>

int main (int argc, char *argv[])
{
	char *p = "hello who you are ? ";
	char *dest;
	char s[20];
	int valLen;
	
	dest = (char *) malloc (sizeof (char) * 1000);

	//if we use strncpy_s we will get assert
	//for the size is not enough
	//we can just change s[20] to s[21]
   	
	strncpy_s(s, _countof(s), p, strlen(p));
	printf("%s\n", s);
	


    // Here we use strncpy and get null termination
         /*
	strncpy (dest, p, (valLen = strlen(p)));
	dest[valLen] = '\0';
	printf ("%s\n", dest);
         */
	//system ("pause");
	return 0;
}

分享到:
评论

相关推荐

    安全函数strcpy_s、strncpy_s、snprintf_s、memcpy_s

    为了解决这个问题,C标准库引入了安全版本的这些函数,例如`strcpy_s`, `strncpy_s`, `snprintf_s`, 和 `memcpy_s`。下面我们将详细探讨这些安全函数的功能和使用方法。 1. **strcpy_s**: 这是`strcpy`的安全版本。...

    C++各种函数及对应的头文件

    在C++编程中,使用标准库中的函数能够极大地提高开发效率并简化代码编写过程。本篇文章将详细介绍部分常用的C++函数及其对应的头文件,帮助开发者更好地理解和运用这些资源。 #### 核心概念与术语 在深入探讨之前...

    MFC数据类型转换

    在MFC中,可以使用`strcpy_s`或`strncpy_s`函数。例如,`char* charStr = new char[strlen(constCharPtr) + 1]; strcpy_s(charStr, strlen(constCharPtr) + 1, constCharPtr);` 5. **wstring转string**: 要将`...

    信息安全_数据安全_Two Bytes to Rule Adobe Reader T.pdf

    为了缓解这些风险,出现了增强版的字符串函数,如strncat_s、strncpy_s等,它们由Microsoft引入,提供了额外的安全特性,例如边界检查。尽管如此,即使有了这些安全增强,仍需谨慎使用,避免不当操作导致的安全漏洞...

    stricmp与stricmp的关系

    例如,strncpy 函数已经过时了,存在不安全隐患,可以考虑使用 strncpy_s 函数来代替。同时,其他的字符串函数也存在类似的安全问题,因此需要注意到这些问题,以确保程序的安全性和可靠性。 stricmp 和 _stricmp ...

    safeclib-master.zip linux libsafec linux安全函数源码

    1. `strncpy_s()`:这个函数是`strncpy()`的安全版本,它需要指定目标缓冲区的大小,并且在复制过程中会确保不会超过该大小。 2. `strcpy_s()`:类似地,这是`strcpy()`的安全版本,也包含了目标缓冲区大小的检查。...

    C语言库函数使用大全_C语言_

    - `strcpy_s` 和 `strncpy_s` 是安全版的字符串拷贝函数,能防止缓冲区溢出。 7. **类型转换函数** - `int atoi(const char *str)` 将字符串转换为整数,`double atof(const char *str)` 转换为浮点数。 - `...

    clib字符串函数使用

    在Linux系统中,C语言标准库(通常称为clib或libc)提供了丰富的字符串处理函数,使得程序员能够方便...在编写涉及字符串操作的程序时,应始终考虑最佳实践,如使用`strncpy_s()`而非`strcpy()`,以增强代码的安全性。

    strncpy与snprintf 的用法比较

    1. `snprintf`的使用通常比`strncpy`更简洁,因为它可以格式化输出并避免缓冲区溢出。 2. `snprintf`能够返回实际写入的字符数,而`strncpy`不能提供此信息。 3. 两者都存在性能问题,当处理字符串长度差异较大时,...

    编写安全的代码03(中文版)

    使用安全的函数,如C++的`std::string`或C的`strncpy_s`。 7. 代码审查:定期进行同行代码审查,可以发现潜在的安全问题,提升整体代码质量。 8. 使用加密:对敏感数据进行加密,确保即使数据被盗,也无法直接读取...

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

    问题:函数memcpy(dest, src, sizeof(dest))、strncpy(dest, src, sizeof(dest))和snprintf(dest, sizeof(dest), “%s”, src)都可以将src字符串中的内容拷贝到dest字符串中。哪一种方式效率最高呢?就是说,哪种...

    字符串处理函数.zip

    例如,避免使用`strcpy()`和`strcat()`这样的函数,因为它们可能导致缓冲区溢出,而应优先选择`strncpy_s()`和`strncat_s()`等安全版本的函数。同时,合理使用字符串池和内存分配策略可以提升程序效率。 总的来说,...

    详解c语言中的 strcpy和strncpy字符串函数使用

    C语言中的strcpy和strncpy字符串函数使用详解 strcpy和strncpy函数是C语言中的字符串复制函数,它们都是用来将源字符串复制到目标字符串中。下面我们将详细介绍这两个函数的使用方法和注意事项。 strcpy函数 ...

    ( ap6181_sina33m_sc3817r验证通过_20170710_1608没有外层目录.7z

    调通sina33m下的ap6181版本 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 ...完成时间:2017/7/7 18:11 版本:V1.0 SDK:Android6.0.1 开发板:SC3817R ...1、关闭“设置”中的“蓝牙”选项: R:\wyb\ap6181_sina33m_sc...

    sei-cert-c-coding-standard-2016-v01_c_groundh88_安全编程_sei-cert-c-

    7. **安全函数库**:标准推荐使用安全的函数库替代传统的不安全函数,如使用`strncpy`代替`strcpy`,`snprintf`代替`sprintf`,以降低缓冲区溢出的风险。 8. **代码审查与测试**:标准不仅关注编码过程,还强调代码...

    C++实现:简单的学生信息管理系统(控制台程序) (2).docx

    7. **字符串处理**:使用`strncpy_s`函数安全地复制字符串,防止缓冲区溢出。例如,`strncpy_s(idNumber, iD, 12);`将`iD`中的前12个字符复制到`idNumber`中。 8. **输入输出**:使用`std::cout`和`std::cin`进行...

    window api

    4. 安全性:避免使用易受攻击的API,如strcpy和sprintf,转而使用更安全的strncpy_s和snprintf_s等函数。 Windows API的参考文档是开发人员的重要工具,可以帮助查找并理解各种函数的用法和参数。例如,...

    ValueInternals..

    2. **使用安全的库函数替代**:在MSVC80中,可以使用如`strncpy_s`这样的安全版本函数来替代传统的`strcpy`或`memcpy`函数,以减少警告和提高安全性。 3. **内存分配检查**:确保在使用分配的内存之前进行有效性...

Global site tag (gtag.js) - Google Analytics