轉自:http://www.360doc.com/content/12/1224/10/3478092_255969530.shtml
Linux內核中關於字符串的相關操作,首先包含頭文件:
- #include <linux/string.h>
可用函數包括如下:
lib/string.c
- int strnicmp(const char *s1, const char *s2, size_t len)
- int strcasecmp(const char *s1, const char *s2)
- int strncasecmp(const char *s1, const char *s2, size_t n)
- char *strcpy(char *dest, const char *src)
- char *strncpy(char *dest, const char *src, size_t count)
- size_t strlcpy(char *dest, const char *src, size_t size)
- char *strcat(char *dest, const char *src)
- char *strncat(char *dest, const char *src, size_t count)
- size_t strlcat(char *dest, const char *src, size_t count)
- int strcmp(const char *cs, const char *ct)
- int strncmp(const char *cs, const char *ct, size_t count)
- char *strchr(const char *s, int c)
- char *strrchr(const char *s, int c)
- char *strnchr(const char *s, size_t count, int c)
- char *skip_spaces(const char *str)
- char *strim(char *s)
- size_t strlen(const char *s)
- size_t strnlen(const char *s, size_t count)
- char *strpbrk(const char *cs, const char *ct)
- char *strsep(char **s, const char *ct)
- bool sysfs_streq(const char *s1, const char *s2)
- void *memset(void *s, int c, size_t count)
- void *memcpy(void *dest, const void *src, size_t count)
- void *memmove(void *dest, const void *src, size_t count)
- int memcmp(const void *cs, const void *ct, size_t count)
- void *memscan(void *addr, int c, size_t size)
- char *strstr(const char *s1, const char *s2)
- char *strnstr(const char *s1, const char *s2, size_t len)
- void *memchr(const void *s, int c, size_t n)
用法說明:
int strnicmp(const char *s1, const char *s2, size_t len)
功能:比較字符串s1和s2的前len個字符串的大小,不區分字母大小寫。
返回:返回的是字符串s1與s2能比較出大小的那個字符轉換成小寫后兩者的差值。相等返回0。
int strcasecmp(const char *s1, const char *s2)
功能:比較字符串s1和s2的大小,同樣不區分大小寫。
返回:返回的是字符串s1與s2能比較出大小的那個字符轉換成小寫后兩者的差值。相等返回0
注意:這兒字符串s1的長度應該大於s2的長度。
int strncasecmp(const char *s1, const char *s2, size_t n)
功能:比較字符串s1和s2的前n個字符串的大小,不區分字母大小寫。
返回:返回的是字符串s1與s2能比較出大小的那個字符轉換成小寫后兩者的差值。相等返回0 。
char *strcpy(char *dest, const char *src)
功能:把src所指的以NULL結束的字符串復制到dest所指的字符串中。
返回:返回指向dest的指針。
注意:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
char *strncpy(char *dest, const char *src, size_t count)
功能:將字符串src中最多count個字符復制到字符數組dest中(它並不像strcpy一樣遇到NULL才停止復制,而是等湊夠count個字符才停止復制),返回指向dest的指針。
返回:返回指向dest的指針。
注意:
如果count > dest串長度,dest棧空間溢出產生崩潰異常。
否則:
1)src串長度<=dest串長度,(這里的串長度不包含串尾NULL字符)
如果count = [0, src串長度],src的前count個字符復制到dest中。但是由於沒有NULL字符,所以直接訪問dest串會發生棧溢出的異常情況。
這種情況一般這樣使用:
count = src串長度+1,連src的NULL字符一起復制。
count = dest串長度,[0,src串長度]處存放src字串,[src串長度, dest串長度]處存放NULL。
2)src串長度 > dest串長度
如果count = dest串長度,則dest串沒有NULL字符,會導致輸出會有亂碼。如果不考慮src串復制完整性,可以將dest最后一字符置為NULL。
size_t strlcpy(char *dest, const char *src, size_t size)
功能:把src所指的由NULL結束的字符串最多size個字符復制到dest所指的字符串中。
返回:返回指向dest的指針。
注意:strlcpy比strncpy能更好的處理NULL事件,然而strlcpy不是ANSI C函數,一般在linux下使用
因此建議在linux驅動中使用strlcpy函數。
char *strcat(char *dest, const char *src)
功能:把src所指字符串添加到dest結尾處(覆蓋dest結尾處的’\0’)並添加'\0'。
返回:返回指向dest的指針。
注意:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
char *strncat(char *dest, const char *src, size_t count)
功能:把src所指字符串的前count個字符添加到dest結尾處(覆蓋dest結尾處的'\0')並添加'\0'。
返回:返回指向dest的指針。
注意:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
size_t strlcat(char *dest, const char *src, size_t count)
功能:把src所指字符串的前count個字符添加到dest結尾處(覆蓋dest結尾處的'\0')並添加'\0'。
返回:返回指向dest的指針。
注意:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。同樣建議使用strlcat而不是strncat。
int strcmp(const char *cs, const char *ct)
功能:比較字符串cs和ct的大小,區分大小寫。
返回:返回的是字符串s1與s2能比較出大小的那個字符兩者的差值。相等返回0。
注意:比較的最長長度為字符串cs的長度。
int strncmp(const char *cs, const char *ct, size_t count)
功能:比較字符串cs和ct前n個字符串的大小,區分大小寫。
返回:返回的是字符串s1與s2能比較出大小的那個字符兩者的差值。相等返回0。
注意:比較的最長長度為字符串cs的長度。
char *strchr(const char *s, int c)
功能:查找字符串s中首次出現字符c的位置 。
返回:如果字符c出現在字符串s中,則返回首次出現c的位置的指針,如果沒有出現,則返回NULL。
char *strrchr(const char *s, int c)
功能:查找字符c在字符串s中末次出現的位置。
返回:從字符串s中的最后出現出字符c位置的指針,如果沒出現,返回NULL。
char *strnchr(const char *s, size_t count, int c)
功能:查找字符c在字符串s前count個字符中首次出現的位置。
返回:從字符串s中的前count字符中出現出字符c位置的指針,如果沒出現,返回NULL。
char *skip_spaces(const char *str)
功能:除去字符串str首部的空格字符。
返回:除去空格字符的字符串指針。
char *strim(char *s)
功能:除去字符串str首部與尾部的空格字符。
返回:除去空格字符的字符串指針。
size_t strlen(const char *s)
功能:計算字符串s的長度,不包括'\0'在內。
返回:返回s的長度,不包括結束符NULL。
size_t strnlen(const char *s, size_t count)
功能:計算字符串s的長度,這個長度最大計數為count,不包括'\0'在內。
返回:返回s的長度,不包括結束符NULL。
char *strpbrk(const char *cs, const char *ct)
功能:在字符串cs中尋找字符串ct中任何一個字符相匹配的第一個字符的位置,空字符NULL不包括在內。
返回:返回字符串cs中指向第一個位置字符串指針。
char *strsep(char **s, const char *ct)
功能:以字符串ct分解字符串s指向字符串指針所指向的字符串。
返回:返回s指向的字符串按ct分解的前面字符串(不包含ct),s指向了按ct分解的后面字符串(不包含ct)。
bool sysfs_streq(const char *s1, const char *s2)
功用:判斷字符串s1與字符串s2是否相等。
返回:如果相等,返回真;否則返回假。
注意:本函數更多用於linux 通過sysfs輸入的字符串,當使用echo命令時,如:echo 1024 > /sys/module/e1000/parameters/copybreak,echo命令通常會在尾部附加一個’\n’字符。舉例,s1 = “abdc\n”,s2 = “abdc”,則判定s1與s2是相等的。而s1 = “abdc\nd”,s2 = “abdc”,則s1 != s2。
void *memset(void *s, int c, size_t count)
功能:將s指向的count單位(一個字節為一個單位)內存空間以字符c填充。
返回:無。
注意:memset用於常規內存。如果要對IO內存操作,則用memset_io(void *s,int c,size_t count)
void *memcpy(void *dest, const void *src, size_t count)
功能:從src指向的內存的內容復制count單位(一個字節為一個單位)到dest指向的內存區域。
返回:無。
注意:兩個內存區域不能重疊,如果要對IO內存使用,則用memcpy_fromio( )。
void *memmove(void *dest, const void *src, size_t count)
功能:從src指向的內存的內容復制count單位(一個字節為一個單位)到dest指向的內存區域。
返回:無。
注意:兩個內存區域可以重疊,如果要對IO內存使用,則用memcpy_fromio( )。
int memcmp(const void *cs, const void *ct, size_t count)
功能:比較兩個內存區域的前count單位(字節)。
返回:當cs < ct時,返回值<0 ;當cs = ct時,返回值=0;當cs > ct時,返回值>0。返回的具體值為兩個內存區域能比較大小的內存單元的內容的差值,比較還是以char比較的。
void *memscan(void *addr, int c, size_t size)
功能:在內存區域中查找第一次出現字符c的位置,最多查找size單位。
返回:返回位置指針;如果沒有出現,返回size單位后的內存指針。
char *strstr(const char *s1, const char *s2)
功能:在字符串s1查找第一次出現字符串s2(包含s2除NULL的其他全部內容)的位置。
返回:返回位置指針;如果沒有出現,返回NULL。
char *strnstr(const char *s1, const char *s2, size_t len)
功能:在字符串s1查找第一次出現字符串s2(包含s2除NULL的其他全部內容)的位置,最多查找len長度。
返回:返回位置指針;如果沒有出現,返回NULL。
void *memchr(const void *s, int c, size_t n)
功能:在內存區域中查找第一次出現字符c的位置,最多查找size單位。
返回:返回位置指針;如果沒有出現,返回NULL。