前面介绍的strcpy,strcat,strcmp均为作用长度不受长制的字符串函数。此处的长度不受限制与strn系列函数的作用长度受限制相对应,下面我们就来介绍strn系列函数——strncpy,strncat,strncmp。
下面我们解释为什么说这三个函数作用长度受限制。
以strncpy为例,其声明为char *strncpy( char *strDest, const char *strSource, size_t count );
相较于strcpy多了一个长度参数即size_t count
(size_t类型反映数据类型大小,数据不存在负数,相当于unsigned+数据类型),这个参数的作用限制了函数作用于字符串的长度,因此相对于strcpy函数,它更加安全,不容易出bug。加上这个参数后新函数的作用效果就发生了改变,举个例子。
int main()
{
char* str1 = "abcd";
char* str2 = "abe";
strncmp(str1,str2,2);
return 0;
}
这个函数作用效果就是将str2的前两个字符依次拷贝到str1的对应位置。
总结来说,这个函数的作用效果就是将str2的前count个字符拷贝到str1的相应位置。
那么这时候问题又来了,假设str2足够长,如果str1长度小于count,会出现什么样的情况呢?
这个问题我们之前在介绍strcpy的时候已经讨论过,这个时候会出现溢出现象,str2的前count个元素会拷贝到str1里面去,但系统会报错。
那如果str1足够长,str2长度小于count呢?假设str2的长度是n,答案是前n个元素照旧拷贝,从第n+1个元素开始我们将’\0’拷贝进str1的对应位置上。
注:strcpy要求dest对应字符串长度要大于