strcat_s
strcat_s的介绍 -
C/C++中,用于连接两个字符串的标准库函数,是strcat函数的增强版本。
strcat和strcat_s的返回值是不一样的,你用strcat可以这么写,因为返回的是合并后字串的地址,但strcat_s返回不是地址,返回的是错误码,0表示成功,你这里返回的是0,所以就是null
C/C++中,用于连接两个字符串的标准库函数,是strcat函数的增强版本。
strcat和strcat_s的返回值是不一样的,你用strcat可以这么写,因为返回的是合并后字串的地址,但strcat_s返回不是地址,返回的是错误码,0表示成功,你这里返回的是0,所以就是null
1> strcat_s(szBuf,3,"kdfdfj");2> strcat(szBuf,"kdfdfj");对于这两个九,你仔细看就会发现他们有缓冲区溢出的问题.而用第一个函数则不同,它会抛出一个异常。但使用第二个函数的结果则不能确定,因为它可能会错误地改变了程序中其他部分的内存的数据,有可能不会抛出异常,但会导致程序数据后面会介绍。
strcat_s之类的函数的目的就是消除长久以来的字符串溢出的问题,所以设置第二个参数只是告诉操作的的时候需要处理的字符个数,并不会检查目标串可容纳的字符长度。因为并不一定可以得知目标串的长度,比如你用malloc分配了一块内存,然后用一个字符串指针指向该内存,但是你不能知道这块内存有多大。eg:希望你能满意。
strcat_s的与 strcat 的区别 -
strcat_s是VS2005及以后新增的具有更强安全性的CRT函数。
char szBuf[3] = {0};strcat_s(szBuf, 3, kdfdfj); // 第一种连接字符串方法strcat(szBuf, kdfdfj); // 第二种连接字符串方法对于这两个例句,你仔细看就会发现他们有缓冲区溢出的问题.而用第一个函数则不同,它会抛出一个异常。但使用第二个函数的结果则不能确定,因为它可能好了吧!
C++一个程序的问题,strcat_s的用法 -
errno_t strcat_s(char *strDestination,size_t numberOfElements,constchar *strSource);看一下errno_t:typedef int errno_t;所以,这个函数返回的是一个int整形值,你将它赋值给string类型的fullName,结果未定义。正确的方法,将上面一句改成:strcat_s(s,20,".txt");fullName.assign(s);---有帮助请点赞。
这个是微软的实现,也可以写成返回值为void,但是一般为了实现链式表达式,都把返回值写成char char * __cdecl strcat (char * dst,const char * src){ char * cp = dst;while( *cp )cp++; /* find end of dst */ while( *cp++ = *src++ ) ; /* Copy src to end of dst *说完了。
关于strcat_s函数 -
您好!在VS2005之后,为了防止数据溢出问题,特意引进了所谓的安全函数strxxx_s系列。其中strcat_s(str1, num, str2); 第二个参数是指定str1长度。ep : strcat_s(str,sizeof(str),"456");另外不建议使用strcpy_s函数初始化一个char*,会引起不必要的麻烦。可以直接char csName[20] = "到此结束了?。
错的不是strcat_s,而是你对字符串的赋值、引用、比较都理解的不对,用下面这段代码试试,有问题再找我(我这没编译环境,有可能编译不通过)void func1(){ char *s = new char[6];char *a = "1" ;memcpy(s, "func");strcat_s(s, sizeof(s), a);if (strcmp(__FUNCTION__, s)希望你能满意。