本文目录
- strcat_s 和 strcat 的区别
- 关于C++函数strcat_s的疑问
- strcat_s的应用示例
- strcat的用法
- 关于strcat_s的用法
- 关于strcat_s函数
- C++一个程序的问题,strcat_s的用法
- 为何这样用strcat_s出错
strcat_s 和 strcat 的区别
他们的作用我不说你也知道是吧。对于他们的区别,stract_s是VS2005及以后新增的具有更强“安全性“的CRT函数。这个安全性如何理解:如:char szBuf={0};1》 strcat_s(szBuf,3,“kdfdfj“);2》 strcat(szBuf,“kdfdfj“);对于这两个九,你仔细看就会发现他们有缓冲区溢出的问题.而用第一个函数则不同,它会抛出一个异常。但使用第二个函数的结果则不能确定,因为它可能会错误地改变了程序中其他部分的内存的数据,有可能不会抛出异常,但会导致程序数据错误,也可能由于非法内存访问抛出异常这就是他们的区别,一个关于安全性的区别具体还请参见MSDN或其它资料
关于C++函数strcat_s的疑问
你初始化str1的大小就是6,输出当然是6;上面能输出hello word是因为在strcat_s时13字节缓存作为目的缓存,并不是说改变了str1的大小。cound《《str1《《endl输出字符串,这个字符串的首地址是str1,’\0‘结束,并不是输出str1的对应值就完了。
strcat_s的应用示例
char szBuf = {0};strcat_s(szBuf, 3, kdfdfj); // 第一种连接字符串方法strcat(szBuf, kdfdfj); // 第二种连接字符串方法对于这两个例句,你仔细看就会发现他们有缓冲区溢出的问题.而用第一个函数则不同,它会抛出一个异常。但使用第二个函数的结果则不能确定,因为它可能会错误地改变了程序中其他部分的内存的数据,有可能不会抛出异常,但会导致程序数据错误,也可能由于非法内存访问抛出异常
strcat的用法
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
参数:
dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src -- 指向要追加的字符串,该字符串不会覆盖目标字符串。
返回值:该函数返回一个指向最终的目标字符串 dest 的指针。
实例演示了 strcat() 函数的用法。
#include 《stdio.h》#include 《string.h》int main (){char src, dest;strcpy(src, “This is source“);strcpy(dest, “This is destination“);strcat(dest, src);printf(“最终的目标字符串: |%s|“, dest);return(0);}
扩展资料:
strcat函数功能
把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
关于strcat_s的用法
在vs中在#include《iostream》之前加上#define _CRT_SECURE_NO_WARNINGS就可以使用strcat()了!你的char result = { 0 }; 最后这样初始化下;
关于strcat_s函数
您好! 在VS2005之后,为了防止数据溢出问题,特意引进了所谓的安全函数strxxx_s系列。其中 strcat_s(str1, num, str2); 第二个参数是指定str1长度。ep : strcat_s(str,sizeof(str),“456“);另外不建议使用strcpy_s函数初始化一个char*,会引起不必要的麻烦。可以直接 char csName = “123“;希望能帮助到您。
C++一个程序的问题,strcat_s的用法
fullName=strcat_s(s,20,“.txt“);
这一句,查一下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);---------------------------------------------------------------------------------
char* fnew = new char;cout 《《 “strlen(fnew)“《《strlen(fnew) 《《 endl; //1,这里,得到的值为什么是24cout 《《 sizeof(*fnew) 《《 endl; //2,这里得到的值是1为什么先说下面一句,sizeof是运算符,在编译期间运算,由char* fnew的定义推断出fnew为一char型指针,那么(*fnew)为一char,于是sizeof(*fnew)等同于sizeof(char),所以结果是1。
再上一句,大部分实现中,strlen()函数仅仅从字符串尾的’\0’,也就是0来判断一个字符串是否结束。new出来的char数组中的数据是未定义的,因此可能恰好到第24个字符处碰到了0,于是长度被计算成24。对未定义的char数组调用strlen,其结果也应该是不确定的。
为何这样用strcat_s出错
例5:Seen from the top of the mountain,the city is very beautiful.从山顶上看,这座城市很漂亮。解析:过去分词”seen” 作方式状语,且与其逻辑主语the city为被动关系。