超详细讲解长度受限制的字符串函数(保姆级教程!!!)
- 长度受限制的字符串函数
- strncpy函数
- strncpy函数的使用
- strncpy函数的模拟实现
- strncat函数
- strncat函数的使用
- strncat函数的模拟实现
- strncmp函数
- strncmp函数的使用
- strncmp函数的模拟实现
长度受限制的字符串函数
strncpy函数
strncpy函数是把 src 所指向的字符串复制到 dest,最多复制 num 个字符。当 src 的长度小于 num 时,dest 的剩余部分将用空字节(\0)填充。
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
num – 要从源中复制的字符数。
strncpy函数的使用
下面展示strncpy函数的使用:
#include <stdio.h>
#include <string.h>
int main()
{
char src[40];
char dest[12];
memset(dest, '\0', sizeof(dest));
strcpy(src, "This is runoob.com");
strncpy(dest, src, 10);
printf("最终的目标字符串: %s\n", dest);
return(0);
}
编译并运行上面的程序将产生以下结果:
最终的目标字符串: This is ru
strncpy函数具有以下的特点:
1、拷贝num个字符从源字符串到目标空间。
2、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
strncpy函数的模拟实现
char* my_strncpy(char* dest, const char* src, int num)
{
char* tmp = dest;
while (num && (*dest++ = *src++))
{
num--;
}
if (num)
{
while (num--)
{
*dest++ = '\0';
}
}
return tmp;
}
strncat函数
strncat函数把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 num 字符长度为止。
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
src – 要追加的字符串。
num – 要追加的最大字符数
strncat函数的使用
下面的实例演示了 strncat函数的用法:
#include <stdio.h>
#include <string.h>
int main ()
{
char src[50], dest[50];
strcpy(src, "This is source");
strcpy(dest, "This is destination");
strncat(dest, src, 15);
printf("最终的目标字符串: |%s|", dest);
return(0);
}
让我们运行上面的程序将产生以下结果:
最终的目标字符串: |This is destinationThis is source|
strncat函数具有以下的特点:
1、dest要有足够的空间。
2、strncat会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’。
3、如果num大于字符串src的长度,那么仅将src全部追加到dest的尾部;如果num小于字符串src的长度,该字符会将src的所有字符附加在dest末尾。无论哪种情况,都会在新字符串的末尾添加空字符。
strncat函数的模拟实现
void my_strncat(char* dest, const char* src, int num)
{
char* tmp = dest;
char* tmq = (char*)src;
assert(dest);
assert(src);
while (*tmp)
{
tmp++;
}
while (num--)
{
*tmp = *tmq;
tmp++;
tmq++;
}
*tmp = '\0';
printf("%s", dest);
printf("\n");
}
strncmp函数
strncmp函数把 str1 和 str2 进行比较,最多比较前 num 个字节。
str1 – 要进行比较的第一个字符串。
str2 – 要进行比较的第二个字符串。
num – 要比较的最大字符数。
strncmp函数的返回值如下图所示:
即该函数返回值如下:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
strncmp函数的使用
下面是此函数的strncmp函数的使用例子:
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strncmp(str1, str2, 4);
if(ret < 0)
{
printf("str1 小于 str2");
}
else if(ret > 0)
{
printf("str2 小于 str1");
}
else
{
printf("str1 等于 str2");
}
return(0);
}
让我们编译并运行上面的程序,这将产生以下结果:
str2 小于 str1
需要注意的是,字符串大小的比较本质上是根据每个字符的Asall表值大小进行比较得到的,从字符串的第一个字母进行比较,如果相等就依次往后继续比较,直至比较出结果或者遇到\0为止,当然,strncmp函数还有一个限制的要求是比较num个字节,当比较的字节数减为0时也会停止。
strncmp函数的模拟实现
int my_strncmp(const char* str1, const char* str2, int maxlen)
{
assert(str1 != NULL);
assert(str2 != NULL);
int ret = 0;
while (!(ret = (*str1 - *str2)) && *str1 && (maxlen--))
{
str1++;
str2++;
}
if (ret < 0)
ret = -1;
else if (ret > 0)
ret = 1;
return ret;
}
那么,今天的长度受限制的字符串函数的相关内容我就讲述完啦,因为个人能力有限,文章难免会出现纰漏,届时有错误可以私信发给我以及时更正,谢谢大家!