當前位置:網站首頁>strncat() strncmp()

strncat() strncmp()

2022-07-23 23:14:33InfoQ

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, &quot;Cyuyan&quot;);
 strcpy(str2, &quot;yyds&quot;);
 printf(strncat(str1, str2, 5));//追加字符串!
 return 0;
}

運行結果如下 
Cyuyanyyds
來一起看看調試結果說不定會更好點

null

我們把&nbsp;
Size_t 參數改為④來看看

printf(strncat(str1, str2, 4));
null
運行結果依舊和上述結果是一樣的。

null

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
&nbsp;→ 要進行比較的第一個字符串。
str2
&nbsp;→ 要進行比較的第二個字符串。
n
&nbsp;→ 要比較的最大字符數。
這個函數開始比較每個字符串的第一個字符。如果它們相等,則繼續執行下面的對,直到字符不同,直到達到一個結束的空字符,或直到兩個字符串中的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, &quot;Cyuyan&quot;);
 strcpy(str2, &quot;Cyuyanyyds&quot;);
 printf(&quot;%d&quot;, 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;
}

版權聲明
本文為[InfoQ]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207232312171688.html

隨機推薦