當前位置:網站首頁>strncat() strncmp()
strncat() strncmp()
2022-07-23 23:14:33【InfoQ】
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;
}
版權聲明
本文為[InfoQ]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207232312171688.html
邊欄推薦
猜你喜歡
隨機推薦
- 快速解决:Xshell拖不進去文件夾或者軟件包的問題
- RHCSA--文件內容瀏覽、cut、uniq、sort、.tr命令使用
- 信號完整性(SI)電源完整性(PI)學習筆記(三十二)電源分配網路(四)
- EasyGBS平臺出現錄像無法播放並存在RTMP重複推流現象,是什麼原因?
- 第七天筆記
- 【可視化調度軟件】上海道寧為SMB組織帶來NETRONIC下載、試用、教程
- 概率沉思錄:2.The quantitative rules
- 常用的鼠標事件和鍵盤事件
- C#:in、out、ref關鍵字
- GRE,MGRE的詳細了解;OSPF基礎配置知識
- Creo 9.0 如何快速修改CAD坐標系?
- 第五天筆記
- 强化學習——策略梯度理解點
- shell跑的時候需要的需要了解命令
- OKRK3399開發板預留I2C4掛載EEPROM
- 優化華為雲服務器采用Key登陸
- 第2章 基礎查詢與排序
- 【C語言】猜數字小遊戲+關機小程序
- 什麼是Per-Title編碼?
- @FeignClient使用詳細教程(圖解)
- Kettle實現共享數據庫連接及插入更新組件實例
- 基於matlab的CBOC信號調制解調仿真,輸出其相關性,功率譜以及頻偏跟踪
- VSCode 更新後與tab相關快捷鍵無法使用
- 後綴錶達式(暑假每日一題 4)
- 關於初始化page入參的設計思路
- Bean Validation核心組件篇----04
- 動態規劃背包問題之完全背包詳解
- 死磕遞歸1:遞推公式
- SQL報錯盲注詳解
- 工業物聯網中的時序數據
- 配置Gom引擎登錄器出現錯誤提示:沒有發現必備補丁文件!
- 【215】gin框架連接mysql數據庫
- go中的協程原理詳解
- 【JZOF】13機器人的運動範圍
- PCL:多直線擬合(RANSAC)
- 1259. 不相交的握手 動態規劃
- 基於FPGA的UART接口設計
- elk筆記25--快速體驗APM
- 能量原理與變分法筆記19:最小餘能原理+可能功原理
- 梅科爾工作室-小熊派開發筆記2