C++学习过程中积累到的经验(一)

一.关于C++编译器中对C风格字符串函数的一些经验

1.关于strcmp():strcmp()函数是基于‘\0’比较的,如果在函数实参表中的字符串中没有‘\0’,则strcmp结果不定。如:

char a[5]="abcde";
char b[5]={a,b,c,d,f};
//strcmp(a,b);错误

2.关于strcpy():在VS2017下使用strcpy()函数时编译器会报错:“Consider using strcpy_s instead.”。即建议使用安全版本即strcpy_s().
strcpy_s()有两个版本,参数表分别有两个,三个参数。

三个参数时:
errno_t strcpy_s( 
char *strDestination, 
size_t numberOfElements, 
const char *strSource 
);
两个参数时:
errno_t strcpy_s( 
char (&strDestination)[size], 
const char *strSource 
); // C++ only 
————————————————
版权声明:本文为CSDN博主「Leonardo Liu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leowinbow/article/details/82380252

但是在使用过程中需要注意的是要保证缓冲区的的大小,在使用new指令动态分配空间时,建议使用三个参数的版本,限定字符串长度,这样使用起来编译器才不会报错。
PS:关于strncpy()函数和strnpy_s()函数:实际应用起来与strcpy()的区别在于前者只希望将某一字符串的部分元素拷贝。如下:

char a[100];
cin>>a;
char b[5];
strcpy_s(b,5,a);//错误!

运行结果会报错:Buffer is too small!即表示安全版本不允许将一个长度超过x的字符串复制给长度为x的字符串!
strcpy()函数原型为:char * strncpy(char * str2, char * str1, int size);
strncpy()函数原型为:strncpy_s(char * str2, int size2, char * str1, int size1);

3.在VS2015和2017编译器中,使用不安全版本的c风格字符串函数时,编译器会报错或者warning,解决方法为在stdafx.h头文件中的声明如下指令

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_DEPECATE

2020.2.4

发布了2 篇原创文章 · 获赞 0 · 访问量 62

猜你喜欢

转载自blog.csdn.net/WOD_MAAYA/article/details/104175442