c進階篇(三):字符串函數

1.strlen:

strlen - C++ Reference

strlen 函數是一個標準庫函數,用于計算以 null 結尾的字符串的長度,也就是字符串中實際字符的數量,不包括最后的 null 終止符 \0。它定義在 <string.h> 頭文件中。

函數原型:size_t strlen(const char *str);

參數:str:指向以 null 結尾的字符串的指針。

返回值:返回一個?size_t?類型的值,表示字符串?str?中的字符數,不包括結尾的 null 字符。

使用示例:

模擬其實現代碼如下:

size_t my_strlen1(const char *str) {int count = 0;assert(str != NULL);while (*str++) {count++;}return count;
}
size_t my_strlen2(const char* str) {assert(str != NULL);if (*str != '\0') {return 1 + my_strlen2(str+1);}else {return 0;}
}
size_t my_strlen3(const char* str) {assert(str != NULL);char* start = str;while (*str) {str++;}return str - start;
}

2.strcpy

strcpy - C++ Reference

函數原型:char *strcpy(char *dest, const char *src);

參數:dest:目標字符串的指針,它是一個指向足夠大的字符數組或者字符指針,用于存儲復制后的字符串。src:源字符串的指針,是一個指向以 null 結尾的字符串的指針,將被復制到目標字符串中。

返回值:返回指向目標字符串?dest?的指針,即復制后的字符串的起始地址。

使用示例:

模擬其實現代碼如下:

char* my_strcpy(char* dest, const char* str) {char* ret = dest;assert(str && dest);while (*dest++ = *str++) {;}return ret;
}

注意事項:

  1. 目標字符串必須足夠大dest 指向的內存空間必須足夠大,能夠容納 src 指向的字符串及其結尾的 null 字符。否則可能會導致緩沖區溢出,產生未定義的行為。

  2. null 結尾符strcpy 函數會復制 src 指向的字符串直到遇到 null 結尾符為止。因此,復制的結果將會包括 null 結尾符。

  3. 安全性:使用 strcpy 函數時,應確保 src 指向的字符串確實以 null 結尾,否則可能會導致未定義的行為。

3.strcat

strcat - C++ Reference

strcat 函數用于將一個字符串追加到另一個字符串的末尾。它同樣定義在 <string.h> 頭文件中。

函數原型:char *strcat(char *dest, const char *src);

參數dest:目標字符串的指針,是一個以 null 結尾的字符數組或者字符指針,將被用作目標。

src:源字符串的指針,是一個以 null 結尾的字符數組或者字符指針,將被追加到目標字符串的末尾。

返回值:返回指向目標字符串?dest?的指針,即追加后的字符串的起始地址。

使用示例:

模擬其實現代碼如下:

char* my_strcat(char* dest, const char* str) {assert(str&&dest);char* ret = dest;while (*dest) {dest++;}while (*dest++=*str++) {;}return ret;
}

注意事項

  1. 目標字符串必須足夠大:與 strcpy 類似,dest 指向的內存空間必須足夠大,能夠容納 src 指向的字符串及其結尾的 null 字符。否則可能會導致緩沖區溢出,產生未定義的行為。

  2. null 結尾符strcat 函數會在目標字符串 dest 的結尾 null 字符的位置開始追加 src 指向的字符串。因此,追加后的結果仍然以 null 結尾。

  3. 安全性:使用 strcat 函數時,應確保 dest 指向的目標字符串足夠大,且確保 src 指向的字符串以 null 結尾

4.strcmp

strcmp - C++ Reference

strcmp 函數是用于比較兩個字符串的內容是否相同。它同樣定義在 <string.h> 頭文件中。

函數原型:int strcmp(const char *str1, const char *str2);

參數:str1:要比較的第一個字符串的指針。str2:要比較的第二個字符串的指針。

返回值:如果?str1?和?str2?的內容相同,則返回值為 0。如果?str1?的內容大于?str2?的內容,則返回正值。如果?str1?的內容小于?str2?的內容,則返回負值。

使用示例:

模擬其實現代碼如下:

int  my_strcmp(const char* str1, const char* str2) {assert(str1 && str2);while (*str1 == *str2) {str1++;str2++;}if (*str1 == "\0") {return 0;}return *str1 - *str2;
}

注意事項

  1. null 結尾符strcmp 函數會比較 str1str2 指向的字符串,直到遇到 null 結尾符為止。

  2. 大小寫敏感strcmp 是區分大小寫的,即大寫字母和小寫字母被視為不同的字符。

  3. 安全性:使用 strcmp 函數時,應確保 str1str2 都是以 null 結尾的有效字符串,否則可能會導致未定義的行為。

5.strstr

strstr - C++ Reference

strstr 函數用于在一個字符串中搜索指定子字符串的第一次出現,并返回一個指向該子字符串的指針。它同樣定義在 <string.h> 頭文件中。

函數原型:char *strstr(const char *haystack, const char *needle);

參數:haystack:要搜索的主字符串,即被搜索的字符串。needle:要查找的子字符串,即要搜索的目標字符串。

返回值:如果?needle?存在于?haystack?中,則返回一個指向?needle?在?haystack?中第一次出現的位置的指針。如果?needle?不存在于?haystack?中,則返回?NULL

使用示例:

模擬其實現代碼如下:

char* my_strstr(const char*str1, const char* str2) {assert(str1 && str2);const char* s1 = str1;const char* s2 = str2;const char* p = str1;while(*p){s1 = p;s2 = str2;while (*s1 == *s2 && str1!='\0' && str2!='\0') {s1++;s2++;}	if (*s2 == '\0') {return p;}p++;}return NULL;
}


注意事項

  1. 大小寫敏感strstr 函數是區分大小寫的,即大寫字母和小寫字母被視為不同的字符。

  2. 空字符串:如果 needle 是一個空字符串 (""),則 strstr 函數將返回 haystack 的起始地址,因為任何字符串都包含空字符串。

  3. 安全性:確保 haystackneedle 都是以 null 結尾的有效字符串。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41454.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一篇就夠了,為你答疑解惑:鋰電池一階模型-在線參數辨識(附代碼)

鋰電池一階模型-在線參數辨識 背景在線 VS 離線 參數辨識遞推最小二乘法一階戴維南Z域離散表達式 背景 鋰電池一階戴維南等效模型的基礎知識和離線辨識方法&#xff0c;已經在上一期非常詳細地講解了一輪&#xff08;上期文章請戳此處&#xff09;&#xff0c;本期繼續講解一下…

【數據結構】經典鏈表題目詳解集合(反轉鏈表、相交鏈表、鏈表的中間節點、回文鏈表)

文章目錄 一、反轉鏈表1、程序詳解2、代碼 二、相交鏈表1、程序詳解2、代碼 三、鏈表的中間節點1、程序詳解2、代碼 四、回文鏈表1、程序詳解2、代碼 一、反轉鏈表 1、程序詳解 題目&#xff1a;給定單鏈表的頭節點 head &#xff0c;請反轉鏈表&#xff0c;并返回反轉后的鏈…

理解注意力機制與多頭注意力:深度學習中的“聚焦術”

Attention 理解注意力機制與多頭注意力&#xff1a;深度學習中的“聚焦術”什么是注意力機制&#xff1f;**核心思想** 什么是多頭注意力機制&#xff1f;**工作原理** **多頭注意力的優勢****應用領域****結論** 理解注意力機制與多頭注意力&#xff1a;深度學習中的“聚焦術”…

MLIR

方言 簡介操作塊區域值范圍Control Flow and SSACFG Regions 操作與多區域&#xff08;Operations with Multiple Regions&#xff09;閉包&#xff08;Closure&#xff09;圖形區域&#xff08;Graph Regions&#xff09;參數和結果&#xff08;Arguments and Results&#xf…

vscode編輯keil工程

1.編碼問題 通常keil默認amsi格式&#xff0c;vscode默認utf-8格式&#xff0c;直接打開會出現亂碼問題。 解決過程&#xff1a; 1.想著創建keil階段&#xff0c;就使用utf-編碼格式。 在區域設置里面“選擇beta版&#xff0c;提供全球utf-8 提供全球語言支持”&#xff0c…

JVM專題之內存模型以及如何判定對象已死問題

體驗與驗證 2.4.5.1 使用visualvm **visualgc插件下載鏈接 :https://visualvm.github.io/pluginscenters.html https://visualvm.github.io/pluginscenters.html **選擇對應JDK版本鏈接--->Tools--->Visual GC** 2.4.5.2 堆內存溢出 * **代碼** java @RestCont…

從0制作自己的ros導航小車(01、準備工作)

@TOC 前言 本篇說明需要具備的知識和軟硬件。可以不用全部具備,但基礎要有,寫的不是非常詳細。 本小車分為上位機與下位機兩部分,上位機使用旭日x3派運行ros進行開發和算法實現,下位機使用stm32驅動底盤和傳感器數據采集。 一、知識 ①stm32部分(當然也可以使用其它控制…

uniapp/Android App上架三星市場需要下載所需要的SDK

只需添加以下一個權限在AndroidManifest.xml <uses-permission android:name"com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>uniapp開發的&#xff0c;需要在App權限配置中加入以上的額外權限&#xff1a;

1958.力扣每日一題7/7 Java(100%解)

博客主頁&#xff1a;音符猶如代碼系列專欄&#xff1a;算法練習關注博主&#xff0c;后期持續更新系列文章如果有錯誤感謝請大家批評指出&#xff0c;及時修改感謝大家點贊&#x1f44d;收藏?評論? 目錄 思路 解題方法 時間復雜度 空間復雜度 Code 思路 首先將指定位…

游戲開發面試題5

什么是進程、線程、協程 進程 進程是計算機的一種基本運行單位&#xff0c;由操作系統管理資源和分配資源的基本單位&#xff0c;進程可以理解為一個正在運行的程序 線程 線程是計算機的一種獨立執行單元&#xff0c;是操作系統能夠進行運算調度的基本單位&#xff0c;線程之間…

排序 -- 手撕歸并排序(遞歸和非遞歸寫法)

一、基本思想 歸并排序&#xff08;MERGE-SORT&#xff09;是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一個非常典型的應用。將已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每個子序列有…

漢諾塔與青蛙跳臺階

1.漢諾塔 根據漢諾塔 - 維基百科 介紹 1.1 背景 最早發明這個問題的人是法國數學家愛德華盧卡斯。 傳說越南河內某間寺院有三根銀棒&#xff0c;上串 64 個金盤。寺院里的僧侶依照一個古老的預言&#xff0c;以上述規則移動這些盤子&#xff1b;預言說當這些盤子移動完畢&am…

SpringMVC(2)——controller方法參數與html表單對應

controller方法參數與html表單對應 0. User實體類 import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable; import java.util.Date; import java.util.List; import java.util.Map;public class User implements Serializable {private …

ES7210高性能四通道音頻ADC轉換模擬麥克風為IIS數字咪頭

特征 高性能多位 Delta-Σ 音頻 ADC 102 dB 信噪比 -85 分貝 THDN 24 位&#xff0c;8 至 100 kHz 采樣頻率 I2S/PCM 主串行數據端口或從串行數據端口 支持TDM 256/384Fs、USB 12/24 MHz 和其他非標準音頻系統時鐘 低功耗待機模式 應用 麥克風陣列 智能音箱 遠場語音捕獲 訂購…

微服務的分布式事務解決方案

微服務的分布式事務解決方案 1、分布式事務的理論模型1.1、X/Open 分布式事務模型1.2、兩階段提交協議1.3、三階段提交協議 2、分布式事務常見解決方案2.1、TCC補償型方案2.2、基于可靠性消息的最終一致性方案2.3、最大努力通知型方案 3、分布式事務中間件 Seata3.1、AT 模式3.…

人工智能在軟件開發中的角色:助手還是取代者?

人工智能在軟件開發中的角色&#xff1a;助手還是取代者&#xff1f; 隨著科技的飛速發展&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;在軟件開發領域的應用越來越廣泛。從代碼生成、錯誤檢測到自動化測試&#xff0c;AI工具正成為開發者的重要助手。然而&#xf…

Postgresql - 用戶權限數據庫

1、綜述 在實際的軟件項目開發過程中&#xff0c;用戶權限控制可以說是所有運營系統中必不可少的一個重點功能&#xff0c;根據業務的復雜度&#xff0c;設計的時候可深可淺&#xff0c;但無論怎么變化&#xff0c;設計的思路基本都是圍繞著用戶、部門、角色、菜單這幾個部分展…

Django QuerySet對象,filter()方法

filter()方法 用于實現數據過濾功能&#xff0c;相當于sql語句中的where子句。 filter(字段名__exact10) 或 filter(字段名10)類似sql 中的 10 filter(字段名__gt10) 類似SQL中的 >10 filter(price__lt29.99) 類似sql中的 <29.99 filter(字段名__gte10, 字段名__lte20…

程序升級bootloader

文章目錄 概述什么是bootloader&#xff1f;為什么用&#xff1f;bootloader啟動流程圖步驟 下載過程代碼獲取本地配置信息獲取主機傳過來的配置信息bootloader發送2給上位機&#xff0c;上位機發送文件給bootloader根據網站復制CRC 燒寫flasherase啟動編譯問題 概述 用keil編…

聲明隊列和交換機 + 消息轉換器

目錄 1、聲明隊列和交換機 方法一&#xff1a;基于Bean的方式聲明 方法二&#xff1a;基于Spring注解的方式聲明 2、消息轉換器 1、聲明隊列和交換機 方法一&#xff1a;基于Bean的方式聲明 注&#xff1a;隊列和交換機的聲明是放在消費者這邊的&#xff0c;這位發送的人他…