目录
函数strcat
注意
那么们要怎么防止这种越界的情况呢?
函数strncat
注意
函数strcpy 和 函数strncpy
注意
函数strcat
- 功能:将两个字符串拼接起来,strcat(char *dest,const char *str)
- 头文件:#include
- 返回值:返回一个拼接好字符串的指针 -----等价于dest 数组名代表首元素地址 也可以别的顶一个指针去接收
- dest:指向的目标内存,拼接好的字符串最后存储的地方
- str:需要拼接的字符串,在dest后面拼接上去
- strcat(数组名,字符串)
复制代码 注意
- strcat函数是不限制拼接字符的大小,所以可能会出现超过最大范围的情况
那么们要怎么防止这种越界的情况呢?
strcat函数没法系统自动的帮我计算越界情况,只能人工的去计算,尚有一种更加安全且不会越界的函数
函数strncat
- 功能:将两个字符串凭借起来
- strncat(char *dest,const char *str,n)
- strncat(char dest[],const *str .n)
- 头文件#include
- 返回值:返回拼接好字符串的指针,等价于数组名dest
- dest:指向目标的内存,最终存储拼好的字符串
- str:需要拼接的字符串
- n:可以拼接最多str字符串中多少个字符进去目标内存 通常是 sizeof(dest)-strlen(str)-1
- sizeof(dest)-strlen(str)-1 这里的-1是为了给结束标识\0留一个位置
- strncat(数组名,字符串,需要拼接的个数)
复制代码 注意
strncat函数最多可以拼接n+1个字符,+1是为其留下结束标志\0;n是str中代表多少个字符进去拼接。
代码运用:
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char s[15] = "abc";
- char x[15] = "abc";
- // strcat(s,"ooopppqqq"); //会返回一个指针 我们可以用一个char指针来存 也可以不用
- char *p = strcat(s, "ooopppqqq");
- printf("%s\n", s);
- printf("%s\n", p);
- char *q = strncat(x, "asaadfffadfghjklqerer",sizeof(x)-strlen(x)-1);
- printf("%s\n",q);
- printf("%s\n",x);
- return 0;
- }
复制代码 函数strcpy 和 函数strncpy
- 功能:都是将一个字符串拷贝到一个数组中
- 函数strncpy相比于strcpy更加的安全。 保举使用strncpy
- 头文件 #include
- strcpy(char *dest,char *str) <==> strcpy(char dest[],char *str) <==> strcpy(数组名,字符串)
- strncpy(char *dest,char *str,n) <==> strncpy(char dest[],char *str,n) <==> strcpy(数组名,字符串,复制的个数)
- dest是数组名,首元素的地址
- str一个指针字符串的指针,代表字符串的地址
注意
- strcpy和strncpy两个函数都会把原先的数组内里的元素覆盖掉
- strncpy()可以复制n+1个字符到数组dest中,最后一个字符是结束符\0,如果字符串最后没有结束标志\0,那么就不是一个正当的字符串,可能让程序报错。
代码运用:
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char s[6] = "abc";
- char x[6] = "def";
- char ss[] = "hello";
- char *p = strcpy(s, ss);
- printf("%s\n", s); // 会把abc覆盖掉
- printf("%s\n", p);
- strncpy(x, ss, sizeof(x) - 1);
- printf("%s\n", x);//会把def覆盖掉
- return 0;
- }
复制代码 总结:strncpy函数中-1是为了让最后一位是结束标识符,让其是一个正当的字符串 strncpy最多可以放n+1个字符,n是实际复制过去的字符个数 +1是给结束标识留一个位置 例如 strncpy(x,ss,5); x是有六个位置的,我们要留一个位置出来 所以strncp最多可复制5+1个;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |