[zz]Linux字串操作函數 發表於1年前 (1)strcat(串連兩字串)
相關函數
bcopy,memccpy,memcpy,strcpy,strncpy
標頭檔
#include <string.h>
函數定義
char *strcat (char *dest,const char *src);
函數說明
strcat()會將參數src字串拷貝到參數dest所指的字串尾。第一個參數dest要有足夠的空間來容納要拷貝的字串。
傳回值
返回參數dest的字串起始地址
範例
#include <string.h>
#include <stdio.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcat() : %s\n",a);
printf("after strcat() : %s\n",strcat(a,b));
}
執行
before strcat () : string(1)
after strcat () : string(1)string(2)
(2)strchr(尋找字串中第一個出現的指定字元)
相關函數
index,memchr,rinex,strbrk,strsep,strspn,strstr,strtok
標頭檔
#include <string.h>
函數定義
char * strchr (const char *s,int c);
函數說明
strchr()用來找出參數s字串中第一個出現的參數c地址,然後將該字元出現的地址返回。
傳回值
如果找到指定的字元則返回該字元所在地址,否則返回0。
範例
#include <string.h>
#include <stdio.h>
main()
{
char *s="0123456789012345678901234567890";
char *p;
p=strchr(s,'5');
if (p)
{
printf("%s\n",p);
while ((p) && ( *(p+1) != '\0' ))
{
p=strchr(p+1,'5');
if (p)
{
printf("%s\n",p);
}
}
執行
56789012345678901234567890
5678901234567890
567890
(3)strcmp(比較字串)
相關函數
bcmp,memcmp,strcasecmp,strncasecmp,strcoll
標頭檔
#include <string.h>
函數定義
int strcmp(const char *s1,const char *s2);
函數說明
strcmp()用來比較參數s1和s2字串。字串大小的比較是以ASCII 碼錶上的順序來決定,此順序亦為字元的值。strcmp()首先將s1第一個字元值減去s2第一個字元值,若差值為0則再繼續比較下個字元,若差值不為0則將差值返回。例如字串"Ac"和"ba"比較則會返回字元"A"(65)和'b'(98)的差值(-33)。
傳回值
若參數s1和s2字串相同則返回0。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0 的值。
範例
#include <string.h>
#include <stdio.h>
main()
{
char *a="aBcDeF";
char *b="AbCdEf";
char *c="aacdef";
char *d="aBcDeF";
printf("strcmp(a,b) : %d\n",strcmp(a,b));
printf("a-b = %d\n",(*a)-(*b));
printf("strcmp(a,c) : %d\n",strcmp(a,c));
printf("strcmp(a,d) : %d\n",strcmp(a,d));
}
執行
strcmp(a,b) : 1
a-b = 32
strcmp(a,c) : -1
strcmp(a,d) : 0
(4)strcoll(採用目前地區的字元排列次序來比較字串)
相關函數
strcmp,bcmp,memcmp,strcasecmp,strncasecmp
標頭檔
#include <string.h>
定義函數
int strcoll( const char *s1, const char *s2);
函數說明
strcoll()會依環境變數LC_COLLATE所指定的文字流向次序來比較s1和s2 字串。
傳回值
若參數s1和s2字串相同則返回0。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0 的值。
附加說明
若LC_COLLATE為"POSIX"或"C",則strcoll()與strcmp()作用完全相同。
範例
參考strcmp()。
(5)strcpy(拷貝字串)
相關函數
bcopy,memcpy,memccpy,memmove
標頭檔
#include <string.h>
定義函數
char *strcpy(char *dest,const char *src);
函數說明
strcpy()會將參數src字串拷貝至參數dest所指的地址。
傳回值
返回參數dest的字串起始地址。
附加說明
如果參數dest所指的記憶體空間不夠大,可能會造成緩衝溢出(buffer Overflow)的錯誤情況,在編寫程式時請特別留意,或者用strncpy()來取代。
範例
#include <string.h>
#include <stdio.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcpy() :%s\n",a);
printf("after strcpy() :%s\n",strcpy(a,b));
}
執行
before strcpy() :string(1)
after strcpy() :string(2)
(6)strcspn(返回字串中連續不含指定字串內容的字元數)
相關函數
strspn
標頭檔
#include <string.h>
定義函數
size_t strcspn ( const char *s,const char * reject);
函數說明
strcspn()從參數s字串的開頭計算連續的字元,而這些字元都完全不在參數reject 所指的字串中。簡單地說,若strcspn()返回的數值為n,則代表字串s開頭連續有n個字元都不含字串reject內的字元。
傳回值
返回字串s開頭連續不含字串reject內的字元數目。
範例
#include <string.h>
#include <stdio.h>
main()
{
char *str="Linux was first developed for 386/486-based pcs.";
printf("%d\n",strcspn(str," "));
printf("%d\n",strcspn(str,"/-"));
printf("%d\n",strcspn(str,"1234567890"));
}
執行
5
33
30
(7)strdup(複製字串)
相關函數
calloc,malloc,realloc,free
表標頭檔
#include <string.h>
定義函數
char * strdup( const char *s);
函數說明
strdup()會先用maolloc()配置與參數s字串相同的空間大小,然後將參數s字串的內容複寫到該記憶體位址,然後把該地址返回。該地址最後可以利用free()來釋放。
傳回值
返回一字串指標,該指標指向複製後的新字串地址。若返回NULL表示記憶體不足。
範例
#include <string.h>
#include <stdio.h>
main()
{
char a[]="strdup";
char *b;
b=strdup(a);
printf("b[ ]="%s"\n",b);
}