目录
学习目标:学会使用strncpy、strncat、strncmp函数并自主实现
学习目标:学会使用strncpy、strncat、strncmp函数并自主实现
学习内容:
长度受限制的字符串函数介绍
strncpy
strncat
strncmp
学习产出:
!!!!!注:建议将本节与第一节对比学习!!!!!
1.1.1 strncpy函数
char * strncpy ( char * destination, const char * source, size_t num );
该函数将源字符串(source)的num个字符复制到目的空间(destination)中。它与strcpy函数相比较灵活,它可以控复制的个数。
注:
复制完它不会主动加\0
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
1.1.2 自主实现strncpy函数
复制完不需主动加\0
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
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); //返回目的空间的起始地址
}
1.2.1 strncat函数
char * strncat ( char * destination, const char * source, size_t num );
该函数可将源字符串(source)的num个字符追加到目的字符(destination)后面并返回目的字符的起始地址。
注:
追加完后主动加个\0。
若num比源字符串大,追加完源字符串和一个\0后就结束。
1.2.2 自主实现strncat函数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
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);
}
1.3.1 strncmp函数
int strncmp ( const char * str1, const char * str2, size_t num );
该函数与strcmp函数的区别是它只会比较前面的num个字符的大小。也是从第一个字符开始比较他们的ascii码的大小,若相同则比较下一个直至不相同,如果第一个字符串大于第二个字符串,则返回大于0的数字,反之则则返回小于0的数字,若两个字符串完全相同则返回0。
1.3.2 自主实现strncmp函数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
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