C語言中字符串函數的詳細講解

C語言提供了豐富的字符串處理函數,這些函數在<string.h>頭文件中聲明。以下是一些常用字符串函數的詳細講解:

字符串拷貝函數

  • strcpy

    • 功能:將源字符串(包括結尾的'\0')復制到目標字符串。
    • 原型char *strcpy(char *dest, const char *src);
    • 參數dest目標字符串,src源字符串。
    • 返回值:返回指向目標字符串的指針。
    • 示例
      char src[] = "Hello";
      char dest[10];
      strcpy(dest, src);
      printf("%s\n", dest); // 輸出 "Hello"
      
  • strncpy

    • 功能:最多復制n個字符從源字符串到目標字符串。如果源字符串長度小于n,則目標字符串的剩余部分將用'\0'填充。
    • 原型char *strncpy(char *dest, const char *src, size_t n);
    • 參數dest目標字符串,src源字符串,n要復制的最大字符數。
    • 返回值:返回指向目標字符串的指針。
    • 示例
      char src[] = "Hello";
      char dest[10];
      strncpy(dest, src, 3);
      printf("%s\n", dest); // 輸出 "Hel"
      

字符串連接函數

  • strcat

    • 功能:將源字符串(包括結尾的'\0')連接到目標字符串的末尾。
    • 原型char *strcat(char *dest, const char *src);
    • 參數dest目標字符串,src源字符串。
    • 返回值:返回指向目標字符串的指針。
    • 示例
      char dest[50] = "Hello, ";
      char src[] = "World!";
      strcat(dest, src);
      printf("%s\n", dest); // 輸出 "Hello, World!"
      
  • strncat

    • 功能:最多連接n個字符從源字符串到目標字符串。
    • 原型char *strncat(char *dest, const char *src, size_t n);
    • 參數dest目標字符串,src源字符串,n要連接的最大字符數。
    • 返回值:返回指向目標字符串的指針。
    • 示例
      char dest[50] = "Hello, ";
      char src[] = "World!";
      strncat(dest, src, 3);
      printf("%s\n", dest); // 輸出 "Hello, Wor"
      

字符串比較函數

  • strcmp

    • 功能:比較兩個字符串,區分大小寫。
    • 原型int strcmp(const char *str1, const char *str2);
    • 參數str1第一個字符串,str2第二個字符串。
    • 返回值
      • 如果返回值小于0,表示str1小于str2
      • 如果返回值等于0,表示str1str2相等
      • 如果返回值大于0,表示str1大于str2
    • 示例
      char str1[] = "abc";
      char str2[] = "abd";
      int result = strcmp(str1, str2);
      if (result < 0) {printf("%s 小于 %s\n", str1, str2);
      } else if (result == 0) {printf("%s 等于 %s\n", str1, str2);
      } else {printf("%s 大于 %s\n", str1, str2);
      }
      
  • strncmp

    • 功能:最多比較n個字符。
    • 原型int strncmp(const char *str1, const char *str2, size_t n);
    • 參數str1第一個字符串,str2第二個字符串,n要比較的最大字符數。
    • 返回值:與strcmp相同。
    • 示例
      char str1[] = "abcdef";
      char str2[] = "abcxyz";
      int result = strncmp(str1, str2, 3);
      if (result == 0) {printf("前3個字符相等\n");
      }
      

字符串長度函數

  • strlen
    • 功能:計算字符串的長度(不包括結尾的'\0')。
    • 原型size_t strlen(const char *str);
    • 參數str要計算長度的字符串。
    • 返回值:返回字符串的長度。
    • 示例
      char str[] = "Hello, World!";
      size_t len = strlen(str);
      printf("字符串長度:%zu\n", len); // 輸出 "字符串長度:13"
      

字符串查找函數

  • strchr

    • 功能:在字符串中查找首次出現的指定字符。
    • 原型char *strchr(const char *str, int c);
    • 參數str要查找的字符串,c要查找的字符。
    • 返回值:找到則返回指向該字符的指針,否則返回NULL
    • 示例
      char str[] = "Hello, World!";
      char *p = strchr(str, 'o');
      if (p != NULL) {printf("字符 'o' 在位置:%ld\n", p - str); // 輸出 "字符 'o' 在位置:4"
      }
      
  • strrchr

    • 功能:在字符串中查找最后一次出現的指定字符。
    • 原型char *strrchr(const char *str, int c);
    • 參數str要查找的字符串,c要查找的字符。
    • 返回值:找到則返回指向該字符的指針,否則返回NULL
    • 示例
      char str[] = "Hello, World!";
      char *p = strrchr(str, 'o');
      if (p != NULL) {printf("字符 'o' 最后出現的位置:%ld\n", p - str); // 輸出 "字符 'o' 最后出現的位置:7"
      }
      
  • strstr

    • 功能:在字符串中查找首次出現的子字符串。
    • 原型char *strstr(const char *haystack, const char *needle);
    • 參數haystack要查找的主字符串,needle要查找的子字符串。
    • 返回值:找到則返回指向子字符串首次出現位置的指針,否則返回NULL
    • 示例
      char haystack[] = "Hello, World!";
      char needle[] = "World";
      char *p = strstr(haystack, needle);
      if (p != NULL) {printf("子字符串 '%s' 在位置:%ld\n", needle, p - haystack); // 輸出 "子字符串 'World' 在位置:7"
      }
      

字符串分割函數

  • strtok
    • 功能:根據指定的分隔符將字符串分割成子字符串。
    • 原型char *strtok(char *str, const char *delim);
    • 參數str要分割的字符串,delim分隔符字符串。
    • 返回值:返回指向下一個子字符串的指針,如果分割完成則返回NULL
    • 示例
      char str[] = "Hello, World! This is C.";
      char *token = strtok(str, " ,!."); // 分隔符為 ' ', ',', '!' 和 '.'
      while (token != NULL) {printf("%s\n", token);token = strtok(NULL, " ,!."); // 后續調用傳入NULL
      }
      // 輸出:
      // Hello
      // World
      // This
      // is
      // C
      

字符串轉換函數

  • atoi

    • 功能:將字符串轉換為整數。
    • 原型int atoi(const char *str);
    • 參數str要轉換的字符串。
    • 返回值:返回轉換后的整數值。
    • 示例
      char str[] = "12345";
      int num = atoi(str);
      printf("轉換后的整數:%d\n", num); // 輸出 "轉換后的整數:12345"
      
  • atof

    • 功能:將字符串轉換為浮點數。
    • 原型double atof(const char *str);
    • 參數str要轉換的字符串。
    • 返回值:返回轉換后的浮點數值。
    • 示例
      char str[] = "123.45";
      double num = atof(str);
      printf("轉換后的浮點數:%.2f\n", num); // 輸出 "轉換后的浮點數:123.45"
      
  • itoa(非標準)

    • 功能:將整數轉換為字符串。
    • 原型char *itoa(int value, char *str, int radix);
    • 參數value要轉換的整數,str存儲結果的字符串,radix進制(如10表示十進制)。
    • 返回值:返回指向存儲結果的字符串的指針。
    • 示例
      int num = 12345;
      char str[20];
      itoa(num, str, 10);
      printf("轉換后的字符串:%s\n", str); // 輸出 "轉換后的字符串:12345"
      

這些函數提供了強大的字符串操作能力,熟練掌握它們可以讓你更高效地處理字符串相關的任務。在使用這些函數時,要注意它們的安全性,例如strcpystrcat可能導致緩沖區溢出,可以通過使用strncpystrncat等帶長度參數的函數來避免這些問題。

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

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

相關文章

可視化數據圖表怎么做?如何實現三維數據可視化?

目錄 一、三維數據可視化的要點 1. 明確數據可視化的目標 2. 篩選與整理數據 3. 選擇合適的圖表類型 4. 運用專業工具制作 5. 優化圖表的展示效果 二、數據可視化圖表怎么做&#xff1f; 1. 理解三維數據的特性 2. 數據處理與三維建模 3. 設置光照與材質效果 4. 添加…

在Linux服務器上部署Jupyter Notebook并實現ssh無密碼遠程訪問

Jupyter notebook版本7.4.2&#xff08;這個版本AI提示我Jupyter7&#xff08;底層是 jupyter_server 2.x&#xff09; 服務器開啟服務 安裝Jupyter notebook 7.4.2成功后&#xff0c;終端輸入 jupyter notebook --generate-config 這將在 ~/.jupyter/ 目錄下生成 jupyter_…

走出 Demo,走向現實:DeepSeek-VL 的多模態工程路線圖

目錄 一、引言&#xff1a;多模態模型的關鍵轉折點 &#xff08;一&#xff09;當前 LMM 的三個關鍵挑戰 1. 數據的真實性不足 2. 模型設計缺乏場景感知 3. 語言能力與視覺能力難以兼顧 &#xff08;二&#xff09;DeepSeek-VL 的根本出發點&#xff1a;以真實任務為錨點…

數據庫原理及其應用 第六次作業

題目 參考答案 題目1. 教材P148第1題 問題&#xff1a;什么是數據庫的安全性&#xff1f; 答案&#xff1a;數據庫的安全性是指保護數據庫以防止不合法的使用所造成的數據泄露、更改或破壞 。它通過用戶身份鑒別、存取控制&#xff08;包括自主存取控制和強制存取控制&#x…

2025系統架構師---選擇題知識點(押題)

1.《計算機信息系統安全保護等級劃分準則》(GB 17859-1999)由低到高定義了五個不同級別的計算機系統安全保護能力。 第一級:用戶自主保護級---通過隔離用戶與數據實現訪問控制,保護用戶信息安全; 第二級:系統審計保護級---實施更細粒度的訪問控制,通過審計和隔離資源確…

Qt操作SQLite數據庫教程

Qt 中操作 SQLite 數據庫的步驟如下&#xff1a; 1. 添加 SQLite 驅動并打開數據庫 #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>// 創建數據庫連接 QSqlDatabase db QSqlDatabase::addDatabase("QSQLITE"); db.setData…

從紫光集團看基本財務分析

PE 46PE 代表投資人對他的期望是它的業績至少要增長50%才算及格。 但實際業績 一年不如一年. 所以&#xff0c;這個PE 應該是 業績倒退了&#xff0c;但是市值還沒有掉下去&#xff0c;導致運算的結果處在高PE階段。 那么隨著股價的下跌&#xff0c;這個數字會慢慢變小。 當然…

基于MNIST數據集的手寫數字識別(CNN)

目錄 一&#xff0c;模型訓練 1.1 數據集介紹 1.2 CNN模型層結構 1.3 定義CNN模型 1.4 神經網絡的前向傳播過程 1.5 數據預處理 1.6 加載數據 1.7 初始化 1.8 模型訓練過程 1.9 保存模型 二&#xff0c;模型測試 2.1 定義與訓練時相同的CNN模型架構 2.2 圖像的預處…

centos中postfix的作用

/usr/libexec/postfix/master 是 Postfix 郵件服務器的主進程&#xff0c;qmgr 和 pickup 是 Postfix 的子進程。這些進程本身是正常的&#xff0c;但如果你懷疑服務器被用于釣魚活動&#xff0c;需要進一步檢查 Postfix 的配置和日志&#xff0c;確保它沒有被濫用。 1. 檢查 P…

藍牙耳機什么牌子好?倍思值得沖不?

最近總被問“藍牙耳機什么牌子好”&#xff0c;作為踩過無數坑的資深耳機黨&#xff0c;必須安利剛入手的倍思M2s Pro主動降噪藍牙耳機&#xff01;降噪、音質、顏值全都在線&#xff0c;性價比直接拉滿。 -52dB降噪&#xff0c;通勤摸魚神器 第一次開降噪就被驚到&#xff01…

游戲引擎學習第285天:“Traversables 的事務性占用”

回顧并為當天的工作做準備 我們有一個關于玩家移動的概念&#xff0c;玩家可以在點之間移動&#xff0c;而且當這些點移動時&#xff0c;玩家會隨之移動。現在這個部分基本上已經在工作了。我們本來想實現的一個功能是&#xff1a;當玩家移動到某個點時&#xff0c;這個點能“…

java中的包機制

包機制 為了更好地組織類&#xff0c;java提供了包機制&#xff0c;用于區分類名的命名空間 包語句的語法格式為 package pkg1[. pkg2[. pkg3...]]一般利用公司域名倒置作為包名 &#xff1a; 公司域名&#xff1a;www.baidu.com 包名&#xff1a;com.baidu.www 為了能夠…

python打卡DAY22

##注入所需庫 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import random import numpy as np import time import shap # from sklearn.svm import SVC #支持向量機分類器 # # from sklearn.neighbors import KNeighborsClassifier …

CodeBuddy 開發 JSON 可視化工具實錄:JsonVision 的誕生之旅

我正在參加CodeBuddy「首席試玩官」內容創作大賽&#xff0c;本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 &#x1f9ed; 項目起點&#xff1a;一個靈光一現的念頭 在日常的前端開發中&#xff0c;我時常需要調試復雜的…

Redis學習專題(一)配置和持久化

目錄 一.配置Redis 1.配置application.properties 2. 配置Config 3.測試連接redis 二、Redis持久化 持久化方案 RDB&#xff1a; 1、RDB基礎認識 1、具體流程如下&#xff1a; 3、小結&#xff1a; 3、Fork&Copy-On-Write 4、RDB的配置 5、默認快照的配置 6、…

[ctfshow web入門] web77

信息收集 上一題的讀取flag方式不能用了&#xff0c;使用后的回顯是&#xff1a;could not find driver 解題 同樣的查目錄方法 cvar_export(scandir("glob:///*"));die();cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString…

每日算法刷題Day8 5.16:leetcode定長滑動窗口4道題,用時1h

5. 2379.得到k個黑塊的最少涂色次數(簡單) 2379. 得到 K 個黑塊的最少涂色次數 - 力扣&#xff08;LeetCode&#xff09; 思想 1.返回至少出現 一次 連續 k 個黑色塊的 最少 操作次數 2.還是定長k&#xff0c;統計量就是把白色變成黑色的操作次數&#xff0c;無需記錄當前有…

很啰嗦,再次總結 DOM

DOM (文檔對象模型) 詳解 一、DOM 基礎概念 1. 定義與作用 DOM&#xff08;Document Object Model&#xff09;即文檔對象模型&#xff0c;是一種用于 HTML 和 XML 文檔的編程接口。它將文檔解析為一個由節點和對象組成的樹狀結構&#xff0c;允許程序和腳本動態訪問、修改文…

ES6 (ECMAScript 2015) 詳解

文章目錄 一、ES6簡介1.1 什么是ES6&#xff1f;1.2 為什么要學習ES6&#xff1f;1.3 瀏覽器支持情況 二、let和const關鍵字2.1 let關鍵字2.2 const關鍵字2.3 var、let和const的選擇 三、箭頭函數3.1 基本語法3.2 箭頭函數的特點3.3 何時使用箭頭函數 四、模板字符串4.1 基本語…

LeetCode 746 使用最小花費爬樓梯

當然可以&#xff01;LeetCode 746 是一道經典的動態規劃入門題&#xff0c;我來用 C 為你詳細解釋。 題目描述 給定一個整數數組 cost&#xff0c;其中每個元素 cost[i] 表示從第 i 個臺階向上爬需要支付的費用。一旦支付費用&#xff0c;你可以選擇向上爬 1 步 或 2 步。 你…