strcmp,strcat,strcpy和strncmp,strncat,strncpy的区别比较
原创
©著作权归作者所有:来自51CTO博客作者一个老大爷的原创作品,请联系作者获取转载授权,否则将追究法律责任
长度不受限制的字符串函数:有strcpy,strcmp,strcat函数,长度受限制的字符串函数:strncmp,strncat,strncpy
strcpy,strcat,strcmp:拷贝到不能拷贝,追加到不能追加,比较到不能比较,以‘\0'作为结束标志,所以说是长度不受限制的字符串函数。但是也有些问题,例如strcpy,如果拷贝的目的空间不够,而拷贝的时候拷贝到’\0'才停止,所以这个函数就会变得不安全。
strcpy:
可以看到程序输出但是崩溃了
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[5] = "abc";
char arr2[] = "defghijk";
printf("%s\n", strcpy(arr1, arr2));
return 0;
}
因为这些函数不受长度限制,导致不安全,所以就有了后来的长度受限制的字符串函数
strncpy:char* strncpy(char* dest,const char* src,size_t num);
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[5] = "haha";
char arr2[] = "hello";
strncpy(arr1, arr2,2); //2是限制拷贝的个数,个数如果超出本身的数,后面补‘\0'
printf("%s\n", arr1);
return 0;
}
拷贝num个字符从源字符串到目标空间;
如果源字符串的长度小于num,则拷贝完字符串后,在目标的后面追加0,直到num个;
strncat:
char*strncat(char*dest,const char*src,size_t num);
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "hello,world!";
char arr2[] = "abcd";
strncat(arr1, arr2, 4);//追加过去后会
printf("%s\n", arr1);
return 0;
}
1.如果源字符串的长度小于num,后面的也不用管了;注意和strncpy区分;
2.追加过去后会主动加一个’\0'
strncmp:
int strncmp(const char*string1,const char*string2,size_t count);
#include<stdio.h>
#include<string.h>
int main()
{
const char* p1 = "hello,world!";
const char* p2 = "abcd";
int ret=strncmp(p1, p2, 2);
printf("%d\n", ret);
return 0;
}