1. 程式人生 > >【C語言】標準庫字串函式整理

【C語言】標準庫字串函式整理

strcmp 字串比較

函式原型

extern int strcmp(const char *s1,const char *s2);

說明

C/C++函式,比較兩個字串
設這兩個字串為str1,str2,
若str1==str2,則返回零;
若str1<str2,則返回負數;
若str1>str2,則返回正數。
matlab中函式,strcmp(s1,s2) 判斷兩個字串s1和s2是否相同,相同返回true ,不同返回false

注意事項

引數s1和s2都不為空。

strncmp 字串前n個字元比較

函式原型

int strncmp ( const char * str1, const char * str2, size_t n );

說明

str1, str2 為需要比較的兩個字串,n為要比較的字元的數目。
若str1與str2的前n個字元相同,則返回0;若s1大於s2,則返回大於0的值;若s1 小於s2,則返回小於0的值。

注意事項

引數s1和s2都不為空。

sprintf 格式化字串

函式原型

int sprintf( char *buffer, const char *format, [ argument] … );

說明

sprintf指的是字串格式化命令,主要功能是把格式化的資料寫入某個字串中。sprintf 是個變參函式。

注意事項

使用sprintf 對於寫入buffer的字元數是沒有限制的,這就存在了buffer溢位的可能性。

snprintf 安全格式化字串

函式原型

int snprintf(char *str, size_t size, const char *format, ...)

引數
str 需要格式化輸入的字串
size 格式化後字串大小限制

說明

將可變個引數(…)按照format格式化成字串,然後將其複製到str中
(1) 如果格式化後的字串長度 < size,則將此字串全部複製到str中,並給其後新增一個字串結束符(’\0’);
(2) 如果格式化後的字串長度 >= size,則只將其中的(size-1)個字元複製到str中,並給其後新增一個字串結束符(’\0’),返回值為欲寫入的字串長度。。

注意事項

1、要比較的字元包括字串結束標誌’\0’,而且一旦遇到’\0’就結束比較,無論n是多少,不再繼續比較後邊的字元。

2、2個字串都不為空

sscanf 格式化讀取

函式原型

int sscanf(  const char *buffer,  const char *format, [ argument ] ...   ); 

引數

buffer   儲存的資料
format   窗體控制元件字串。 有關詳細資訊,請參閱"格式規範"。
argument 可選自變數
locale  要使用的區域設定

說明

sscanf與scanf類似,都是用於輸入的,只是後者以鍵盤(stdin)為輸入源,前者以固定字串為輸入源。
第二個引數可以是一個或多個

{%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號}

注:
1、 * 亦可用於格式中, (即 %*d 和 %*s) 加了星號 (*) 表示跳過此資料不讀入. (也就是不把此資料讀入引數中)
2、 {a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。
3、 width表示讀取寬度。
4、 {h | l | I64 | L}:引數的size,通常h表示單位元組size,I表示2位元組 size,L表示4位元組size(double例外),l64表示8位元組size。
5、type :這就很多了,就是%s,%d之類。
6、特別的:%*[width] [{h | l | I64 | L}]type 表示滿足該條件的被過濾掉,不會向目標引數中寫入值
失敗返回0 ,否則返回格式化的引數個數
7、如果讀取的字串,不是以空格來分隔的話,就可以使用%[]。

返回結果

每個函式都將返回成功轉換並分配的欄位數;
返回值不包括已讀取但未分配的欄位。 返回值為 0 表示沒有分配任何欄位。 返回值是EOF是否有錯誤或如果在第一次轉換之前到達字串結尾。
如果buffer或format是NULL呼叫指標,無效引數處理程式,如中所述引數驗證。 如果允許繼續執行,則這些函式返回 -1 並將errno設定為EINVAL。
成功則返回引數數目,失敗則返回-1,錯誤原因存於errno中。
經多次測試[來源請求],在linux系統中成功返回的是成功轉換的值的個數,例如:
sscanf(“1 2 3”,"%d %d %d",buf1, buf2, buf3); 成功呼叫返回值為3,即buf1,buf2,buf3均成功轉換。
sscanf(“1 2”,"%d %d %d",buf1, buf2, buf3); 成功呼叫返回值為2,即只有buf1,buf2成功轉換。
(注意:此處buf均為地址)

strcpy 字串複製

函式原型

#include <string.h> 
char *strcpy(char* dest, const char *src);

說明

功能:把從src地址開始且含有NULL結束符的字串複製到以dest開始的地址空間
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

注意事項

一:若陣列長度不足以容納整個字串,則程式執行崩潰。

strncpy 字串複製

函式原型

char *strncpy(char *dest,char *src,size_t n);

使用例項

#include<stdio.h>
#include<string.h>
int main(){
char name[]={"Chinanet"},dest[20]={};
strncpy(dest,name,3);
dest[3]='\0';//沒有會亂碼
printf("%s\n",dest);
}

注意事項
1、該函式不復制’\0’,要自己在末尾加上
2、

strstr 判斷是否為子串

函式原型

Get

URI

/ap1/v1/sysinfo/service

請求引數

  1. 不帶引數查詢,預設查詢出在配置檔案中指定的所有服務的資訊。
    (配置檔案路徑:/conf/vanilla/autoload_configs/tools.conf)
  2. 帶引數的查詢,可以指定查詢某個服務的狀態資訊
  • Get:/api/v1/tools/service?name=tuned

返回結果

{
    "ret": 2,
    "data":
    {
        "list":
        [
            {"name":"tuned", "status":"active"},
            {"name":"firewalld", "status":"inactive"}
        ]
    },
    "error": null,
}

strchr 查詢字元首次出現位置

函式原型

char *strchr(char* _Str,char _Ch)

標頭檔案

#include <string.h>

功能

查詢字串_Str中首次出現字元_Val的位置

說明

返回首次出現_Val的位置的指標,返回的地址是被查詢字串指標開始的第一個與Val相同字元的指標,如果Str中不存在Val則返回NULL。

strrchr 查詢字元最後出現位置

函式原型

char *strrchr(char* _Str,char _Ch)

標頭檔案

#include <string.h>

功能

查詢字串_Str中最後一次出現字元_Val的位置

說明

查詢一個字元c在另一個字串str中末次出現的位置(也就是從str的右側開始查詢字元c首次出現的位置),並返回這個位置的地址。如果未能找到指定字元,那麼函式將返回NULL。使用這個地址返回從最後一個字元c到str末尾的字串。

strtok 在字串中剔除子串

函式原型

char *strtok(char s[], const char *delim);

標頭檔案

#include <string.h>

功能

分解字串為一組字串。s為要分解的字串,delim為分隔符字串。

說明

strtok()用來將字串分割成一個個片段。引數s指向欲分割的字串,引數delim則為分割字串中包含的所有字元。當strtok()在引數s的字串中發現引數delim中包含的分割字元時,則會將該字元改為\0 字元。在第一次呼叫時,strtok()必需給予引數s字串,往後的呼叫則將引數s設定成NULL。每次呼叫成功則返回指向被分割出片段的指標

使用示例

#include<string.h>
#include<stdio.h>
int main(void)
{
    char input[16]="abc,d";
    char*p;
    /*strtok places a NULL terminator
    infront of the token,if found*/
    p=strtok(input,",");
    if(p)
        printf("%s\n",p);
        /*Asecond call to strtok using a NULL
        as the first parameter returns a pointer
        to the character following the token*/
    p=strtok(NULL,",");
    if(p)
        printf("%s\n",p);
    return 0;
}

說明

下面的說明摘自於最新的Linux核心2.6.29,說明了這個函式已經不再使用,由速度更快的strsep()代替

/** linux/lib/string.c** 
Copyright (C) 1991, 1992 Linus Torvalds*//** stupid library routines.. The optimized versions should generally be found 
  * as inline code in <asm-xx/string.h> 
  * These are buggy as well.. 
  * * Fri Jun 25 1999, Ingo Oeser <[email protected]> 
  * - Added strsep() which will replace strtok() soon (because strsep() is 
  * reentrant and should be faster). Use only strsep() in new code, please. 
  ** * Sat Feb 09 2002, Jason Thomas <[email protected]>, 
  * Matthew Hawkins <[email protected]> 
  * - Kissed strtok() goodbye
  */ [1] 

strcat 字串拼接

函式原型

char *strcat(char *dest, const char *src);

函式功能

把src所指字串新增到dest結尾處(覆蓋dest結尾處的’\0’)。

注意事項:

src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

返回指向dest的指標。

strdup 字串複製

函式原型

extern char *strdup(char *s);
標頭檔案:string.h

函式功能

將字串拷貝到新建的位置處
strdup()在內部呼叫了malloc()為變數分配記憶體,不需要使用返回的字串時,需要用free()釋放相應的記憶體空間,否則會造成記憶體洩漏。

注意事項:

不需要使用返回的字串時,需要用free()釋放相應的記憶體空間,否則會造成記憶體洩漏。

相關推薦

C語言標準字串函式整理

strcmp 字串比較 函式原型 extern int strcmp(const char *s1,const char *s2); 說明 C/C++函式,比較兩個字串 設這兩個字串為str1,str2, 若str1==str2,則返回零; 若str1<

c語言實現翻轉字串函式reverse_string

函式reverse_string(char * string) 實現:將引數字串中的字元反向排列。 要求:不能使用C函式庫中的字串操作函式。 #include <stdio.h> #in

C語言模擬實現strchr函式.即在一個字串中查詢一個字元第一次出現的位置並返回

//模擬實現strchr函式.即在一個字串中查詢一個字元第一次出現的位置並返回 #include <stdio.h> //#include <string.h> #includ

c語言模擬實現strchr函式,功能:在一個字串中查詢一個字元第一次出現的位置,如果沒有出現返回NULL

// 模擬實現strchr函式,功能:在一個字串中查詢一個字元第一次出現的位置,如果沒有出現返回NULL #include <stdio.h> #include <assert.h> char const* my_strchr(char cons

C語言統計一個字串中字母、數字、空格及其它字元的數量

統計一個字串中字母、數字、空格及其它字元的數量 解法1: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void Count(con

C語言第三章-函式-2

第2節 函式呼叫   函式呼叫一般有兩種方式,一種是形參不會影響實參的傳值呼叫,另一種是形參會影響實參的傳址呼叫。 傳值呼叫   傳值呼叫是將實參的值傳入函式體中,傳入的不過是實參的副本,不會改變實參。這個在上一節已經講過其中的原因正式因為C語言副本傳參的這個特

C語言判斷一個字串是否為迴文字串

判斷一個字串是否為迴文字串。 #include <stdio.h> int main(void) { char a[100]; int i = 0, j = 0; printf("Plea

C語言malloc()和free()函式的講解以及相關記憶體洩漏問題

1、函式原型及說明: void *malloc(long NumBytes):該函式分配了NumBytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回一個空指標(NULL)。 關於分配失敗的原因,應該有多種,比如說空間不足就是一種。 void free(void *FirstByte): 該

C語言 使用回撥函式實現氣泡排序

實現功能:既能排序整型數,也可以排序字串 程式碼如下: #include <stdio.h> #include <string.h> int int_cmp(const v

C++ Primer標準bitset型別

/* *標準庫bitset型別 *Zhi-Yun Deng *2013-10-31 */ #include <iostream> #include <bitset> //標準庫bitset型別標頭檔案 #include <string>

C++ Primer標準string型別

/* *標準庫string型別 *Zhi-Yun Deng *2013-11-01 */ #include <iostream> #include <string> //標準庫string型別標頭檔案 #include <cctype>

c語言模擬實現strcat函式

簡介:strcat函式是連線兩個字串。例如:有char *str1 = “abcd”,char *str2 = “efg”,strcat (str1,str2)可以將efg連線到abcd後面,結果是abcdefg,並且存放在str1中。 函式原型:extern

C語言用遞迴函式是實現函式功能的幾個例子

1.問題描述:寫一個遞迴函式DigitSum(n),輸入一個非負整數,返回組成它的數字之和。例如,呼叫DigitSum(1729),則應該返回1+7+2+9,它的和是19。 思路:這個題比較類似於求拆分整數,一個一個輸出。這個題多得一步是在拆分後,將這些數字加

C語言返回指標的函式與指向函式的指標

一、返回指標的函式  指標也是C語言中的一種資料型別,因此一個函式的返回值肯定可以是指標型別的。 返回指標的函式的一般形式為:型別名 * 函式名(引數列表)  比如下面這個函式,返回一個指向char型別變量的指標 1 // 將字串str中的小寫字母變成大寫字母,並返回

C語言編寫函式實現函式atoi,把字串轉換成整形

//編寫函式實現庫函式atoi,把字串轉換成整形 #include <stdio.h> #include <string.h> int my_atoi(const char *

C語言字串處理自定義函式

1、字串求長度 #include <stdio.h> int Mystrlen1(const char *str) { int i=0; while(*(str++)!='\0') { i++; } return i; } int Mystrlen2(cons

C語言字串函式strtok 按照指定字串分割

C語言字串函式 strtok() 函式原型 char *strtok(char *str,const char *delimiters); 引數 str,待分割的字串 delimiters,分隔符字串 該函式用來將字串str分割成一個個片段。 引數str指

c語言利用指標模式實現字串函式(strlen、strcat、strstr、strcpy、strcmp、memcpy、memove)

模擬實現strlen int my_strlen(const char *p) { assert(p != NULL); char *s = p; while (*p) { p++; } r

C語言字串函式的實現

求字串的長度 strlen 長度不受限制的字串函式 strcpy strcat strcmp 長度受限制的字串函式 strncpy strncat strncmp 字串查詢 strc

C語言字串函式探幽

目錄 1、strcpy() a)如果src長度大於dest會發生什麼? i.執行到strcpy函式之前,檢視a和b的值和記憶體: ii、執行strcpy,觀察記憶體 iii、得出結論 b)如果src長度小於dset呢? c)手寫strcpy d)總結 2、strl