写点什么

strncat() strncmp()

作者:謓泽
  • 2022 年 7 月 23 日
  • 本文字数:1866 字

    阅读完需:约 6 分钟

strncat() strncmp()

🎋strncat() - 连接字符串(受长度限制)🎋

**strncat() **函数的声明方式如下 👇


char *strncat(char *dest, const char *src, size_t n)
复制代码


把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 的长度为止。

dest→指向目标数组,该数组包含了一个 C 语言 字符串,且足够容纳追加后的字符串,包括额外的空字符。

src→要追加的字符串。

n→追加的最大字符串。

Size_t→是一个无符号(unisgned int)整型类型。

该函数返回一个指向最终的目标字符串 dest 的指针。

注意:这里的返回值的指针类型可以是 void 也可以是 char *🧨

🎋strncat()函数代码示例🎋

使用 strncpy() 函数代码示例如下 👇


#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>int main(void){  char str1[20];  char str2[20];  strcpy(str1, "Cyuyan");  strcpy(str2, "yyds");  printf(strncat(str1, str2, 5));//追加字符串!  return 0;}
复制代码


运行结果如下 👇

Cyuyanyyds

✅来一起看看调试结果说不定会更好点✅



我们把 Size_t 参数改为④来看看


printf(strncat(str1, str2, 4));
复制代码



运行结果依旧和上述结果是一样的。



🎋strncat()源程序实现🎋

示例代码如下:👇


char * __cdecl strncat (        char * front,        const char * back,        size_t count        ){        char *start = front;
while (*front++) ; front--;
while (count--) if (!(*front++ = *back++)) return(start);
*front = '\0'; return(start);}
复制代码


🎋strncmp() - 比较字符串(受长度限制)🎋

**strncmp() **函数的声明方式如下 👇


int strncmp(const char *str1, const char *str2, size_t n
复制代码


str1 → 要进行比较的第一个字符串。

str2 → 要进行比较的第二个字符串。

n → 要比较的最大字符数。

这个函数开始比较每个字符串的第一个字符。如果它们相等,则继续执行下面的对,直到字符不同,直到达到一个结束的空字符,或直到两个字符串中的 num 字符匹配,以先发生的为准。

如果返回值 < 0,则表示 str1 小于 str2。

如果返回值 > 0,则表示 str2 小于 str1。

如果返回值 = 0,则表示 str1 等于 str2。

🎋strncmp()函数代码示例🎋

使用 strncpy() 函数代码示例如下 👇


#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>int main(void){  char str1[20];  char str2[20];  strcpy(str1, "Cyuyan");  strcpy(str2, "Cyuyanyyds");  printf("%d", strncmp(str1, str2, 6));
return 0;}
复制代码


运行结果如下 👇

0 → 代表****str1 等于 str2

如果这里没有追加字符串的话结果就会是-1,因为 str1<str2。正因为我们追加了字符为 6,它才可以是 str1 = str2。

🎋strncat()源程序实现🎋

示例代码如下:👇


int __cdecl strncmp(    const char *first,    const char *last,    size_t      count){    size_t x = 0;
if (!count) { return 0; }
/* * This explicit guard needed to deal correctly with boundary * cases: strings shorter than 4 bytes and strings longer than * UINT_MAX-4 bytes . */ if( count >= 4 ) { /* unroll by four */ for (; x < count-4; x+=4) { first+=4; last +=4;
if (*(first-4) == 0 || *(first-4) != *(last-4)) { return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4)); }
if (*(first-3) == 0 || *(first-3) != *(last-3)) { return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3)); }
if (*(first-2) == 0 || *(first-2) != *(last-2)) { return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2)); }
if (*(first-1) == 0 || *(first-1) != *(last-1)) { return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1)); } } }
/* residual loop */ for (; x < count; x++) { if (*first == 0 || *first != *last) { return(*(unsigned char *)first - *(unsigned char *)last); } first+=1; last+=1; }
return 0;}
复制代码


发布于: 2 小时前阅读数: 6
用户头像

謓泽

关注

一起happy! 2022.01.29 加入

谁也不知道旅途的终点是怎么样的,现在只不过是开始。便全力以赴!终点必将是星辰大海。 2021年度博客之星物联网与嵌入式开发TOP5 2021博客之星Top100 阿里云专家博主^星级博主 CSDN⇿掘金⇿InfoQ[创作者]

评论

发布
暂无评论
strncat() strncmp()_7月月更_謓泽_InfoQ写作社区