第一个函数 - strncpy
函数原型 - char *strncpy( char *dest, const char *source, size_t count )
const char *source是指我需要拷贝数据的地方,通俗地讲,就是说从source中将数据拿出来,由于source所维护的空间中的内容并不需要进行改变,所以加上const进行保护,更加安全。
char *dest是指我需要将拷贝到的数据覆盖的地方,通俗地讲就是将从source中拿到的数据拷贝到dest所维护的空间中去。
size_t count是一个无符号整数,在这里是指我需要从source所维护的空间中拿出count个字节大小的数据。
话不多说,来看图中代码
由图中代码和其运行结果可知
strncpy函数会严格的按照代码所要求的字节数从source中拷贝到dest中去。
strncpy函数与strcpy函数有所区别,strncpy只是会将数据拷贝过去,但并不会追加"\0"反之strcpy拷贝完成之后就会追加"\0",这也是strncpy的一个优点。
strncpy的第三个参数size_t count是可以大于strlen(source)的,这中情况下,拷贝后的结果就是将dest中的内容全部变成了source总的内容,这是因为一旦strlen(source)不够count大小的时候,系统会自动在末尾天上"\0",直到补充后的字节数等于count的大小才结束。
第二个函数 - strncmp
特别注意:strncmp可用于比较两个字符串常量或比较数组和字符串常量,不能比较数字等其他形式的参数。
函数原型 - int strncmp(const char* str1, const char* str2, size_t num)
size_t num就是需要比较的
返 回 值:(与strcmp相同)str1 = str2 则返回0,
str1 > str2 则返回大于0的值,
str1 < str2 则返回小于0的值。
用法展示:
就我的这台机器而言,大于0的数就是1,小于0的数就是-1,至于具体是怎么比较字符大小的就要看每个字符对应的ASCLL码值了,在这里我同时给上ASCLL表,各位可以对照一下。
第三个函数 - strncat
函数原型 - char * strncat ( char * destination, const char * source, size_t num)
该函数的作用是追加一个字符串,即:将source所维护的字符串通过自己所给定的字符个数追加到dest所维护的字符串后面去。
如图所示,可以看到,两份代码给的第三个参数是不一样的,但是结果都是一样的,其实通过调试和监视的窗口我们就可以看见,所给参数num是可以大于strlen(source),发现不论num比strlen(source)大多少,最后都只会在追加后的字符串末尾添一个"\0"。注意,当num>strlen(source)时,strncpy函数会在末尾添加足够的"\0"使得最终的字节数等于num。当num>strlen(source)时,strncat只会在末尾添加一个"\0"。