目录
学习目标:学会使用strncpy、strncat、strncmp函数并自主实现
长度受限制的字符串函数介绍
strncpy
strncat
strncmp
!!!!!注:建议将本节与第一节对比学习!!!!!
char * strncpy ( char * destination, const char * source, size_t num );
该函数将源字符串(source)的num个字符复制到目的空间(destination)中。它与strcpy函数相比较灵活,它可以控复制的个数。
注:
复制完它不会主动加\0
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
复制完不需主动加\0
- #define _CRT_SECURE_NO_WARNINGS 1
- #include
- #include
- char* my_strncpy(char*dest, const char*src, size_t num)
- {
- assert(dest);
- assert(src);
- char*ret = dest;
- while (num--) //拷贝src指向的字符到dest中
- {
- if (!*src)//当源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
- {
- *dest++ = '\0';
- }
- else
- {
- *dest++ = *src++;
- }
- }
- return (ret); //返回目的空间的起始地址
- }
char * strncat ( char * destination, const char * source, size_t num );
该函数可将源字符串(source)的num个字符追加到目的字符(destination)后面并返回目的字符的起始地址。
注:
追加完后主动加个\0。
若num比源字符串大,追加完源字符串和一个\0后就结束。
- #define _CRT_SECURE_NO_WARNINGS 1
- #include
- #include
- char* my_strncat(char*dest, const char*src,size_t num)
- {
- assert(dest);
- assert(src);
- char*ret = dest;
- //寻找目的空间的\0
- while (*dest)
- {
- dest++;
- }
- //追加
- while (num--)
- {
- if (!(*dest++ = *src++))
- return (ret);
-
- }
-
- *dest++ = '\0';
- return (ret);
- }
int strncmp ( const char * str1, const char * str2, size_t num );
该函数与strcmp函数的区别是它只会比较前面的num个字符的大小。也是从第一个字符开始比较他们的ascii码的大小,若相同则比较下一个直至不相同,如果第一个字符串大于第二个字符串,则返回大于0的数字,反之则则返回小于0的数字,若两个字符串完全相同则返回0。
- #define _CRT_SECURE_NO_WARNINGS 1
- #include
- #include
- int my_strncmp(const char*dest, const char*src,size_t num)
- {
- assert(dest);
- assert(src);
- //比较
- while (num&&(*dest == *src))
- {
- dest++;
- src++;
- num--;
- }
- if (!num||((*dest)&&(*src)))//num个字符或者字符都比较完时
- {
- return 0;//完全相等时
- }
- return(*dest - *src);
- }
-
争取每次学习都能掉十根头发,不掉头发的程序员不是好程序员。
——Ace Young