对于VS中一些较严谨的(_s)函数如strcpy_s的第二个参数的问题
来源:互联网 发布:php类的反射 编辑:程序博客网 时间:2024/06/05 08:02
在学习中发现strcpy_s中第二个参数不能随便写。开始我碰到这个比较严谨的函数时我故作聪明,将第二个参数使用strlen()代替。但拿不严谨的小聪明去解决严谨的函数问题必然问题一大堆。
今天这一个问题烦了我很久,后来才发现是不懂strcpy_s函数第二个参数的含义。下面这程序是野指针的例子。
#include <stdio.h>#include <stdlib.h>#include <string.h>void main(){ char *p1 = NULL; p1 = (char *)malloc(100); if (p1 == NULL) { return; } strcpy_s(p1, sizeof("11112222") + 1, "11112222"); //1.strcpy_s(char *strDestination,size_t numberOfElements,const char *strSource);第二个参数表示目标缓冲区大小,大于或等于源串的长度+1(存放结束符'/0')。如果没有第二个参数,就没有方法来保证有效的缓冲区尺寸,不然只能假定缓冲足够大来容纳要拷贝的字符串(strcpy函数)。在程序运行时,这将导致不可预料的行为。 //2.如果缓冲区过小会报错:buffer is too small。只需把第二个参数设置成合适的就好了。 //之前我错误地一贯写成「strcpy_s(p1,strlen(p1),"11112222")」。后来改成sizeof("11112222")就报错2了。 printf("p1:%s\n", p1); if (p1 != NULL) { free(p1); p1 = NULL; } if (p1 != NULL) { free(p1); } system("pause");}
小生不才,若有错误,不吝赐教。
1 0
- 对于VS中一些较严谨的(_s)函数如strcpy_s的第二个参数的问题
- C语言编程中对于函数参数的一些解释?
- 对于makefile传递参数的一些问题
- strcpy_s,sprintf_s,wcscpy_s,swprintf_s,wcscat_s,加了_s就真的安全吗?
- 带 t 和 _s 的函数
- 关于strcpy_s源代码的问题
- strcpy与strcpy_s的问题
- VS2012使用strcpy_s的问题
- 关于main函数的第二个参数
- 安全函数(后缀为_s)的参数检查和…
- 算法中对于用七次比较完成5个元素的排序
- CRT函数相关问题,gets_s和strcpy_s的用法
- GTK+中GtkFileChooser的第二个参数
- strcpy_s不接受两个参数 String的实现
- java一些较深度的问题
- VS2012及以上版本中,禁用_s版本函数的方法
- javaScript中String.replace()的第二个参数为函数时的用法介绍
- packageInstalled函数的第二个参数returnCode的源码解读
- 乐视贾跃亭任酷派集团执行董事 成酷派第二股东
- AutoCompleteTextView和Spinner的用法
- android.util.AndroidRuntimeException: requestFeature() must be called before adding content
- [Java教程]RDD专题
- 用递归法将一个整数n转换成字符串。
- 对于VS中一些较严谨的(_s)函数如strcpy_s的第二个参数的问题
- iOS基础_C语言第一讲
- HDU 1036 Average is not Fast Enough!(水题)
- pat之月饼问题
- /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
- 第一篇原创博客
- maven的部署和启动以及常见的三种错误
- 记忆化搜索,dp
- HPU-1693-CZY的YY难题