【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
請求引數
- 不帶引數查詢,預設查詢出在配置檔案中指定的所有服務的資訊。
(配置檔案路徑:/conf/vanilla/autoload_configs/tools.conf) - 帶引數的查詢,可以指定查詢某個服務的狀態資訊
- 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