C字串處理函式

2022-05-01 14:36:12 字數 3981 閱讀 9372

部分參考百科。

c常用字串函式:字串輸入函式,字串輸出函式,字串處理函式,標準輸入輸出流

字串處理函式:

1、字串長度:strlen(str),返回字串實際長度,不包括'\0',返回值型別為size_t。

2、字串拼接:strcat(str1,str2),str2拼接到str之後,如果str1長度不夠大,將會溢位,覆蓋str1之後的資料;

strncat(str1,str2,n),拼接str2中指定長度n的資料到str1中。

3、字串對比:strcmp(str1,str2),對比str1和str2中的資料內容是否完全相等,是返回0,否則返回非零值。

strncmp(str1,str2,n),對比str2中的前n位和str1是否相等。//int temp = strncmp("111"4, "111555555", 3);//相等為0   3指的是str2裡面的前三位

4、字串拷貝:strcpy(str1,str2),str2中的資料copy到str1中,str1和str2所指記憶體區域不可以重疊且str1必須有足夠的空間來容納str2的字串,str1先清零然後將str2的內容copy進

str1,str1長度不足的話程式會崩潰。

strncpy(str1,str2,n),str2指定長度n的資料copy到str1。

5、字串查詢:strchr(str,c),查詢字元c在字串str中首次出現的位置,成功則返回要查詢字元第一次出現的位置,失敗返回null。

strrchr(str,c),查詢字元c在字串str中最後一次出現的位置,成功,返回該字元以及其後面的字元,如果失敗,則返回 null。

strstr(str1,str2),判斷str2是否是str1的子串,如果是返回str2在str1中首次出現的位址,失敗返回null。

strpbrk(str1,str2),在str1中找出str2任一字元首次出現的位置並返回第乙個滿足條件的字元指標,失敗返回null。

6、字串轉換:atoi(str),字串轉換成整形資料,標頭檔案#include。函式會掃瞄引數 nptr字串,跳過前面的空白字元(例如空格,tab縮排等,可以通過isspace( )函式來檢測),

直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時('\0')才結束轉換,並將結果返回。如果 nptr不能轉換成 int 或者 nptr為空字串,那麼將返回 null。

atof().atol()參考atoi()。

long int strtol(const char *nptr,char **endptr,int base);strtol函式會將引數nptr字串根據引數base來轉換成長整型數。

a.引數base範圍從2至36,或0(10進製)

b.endptr是乙個傳出引數,函式返回時指向後面未被識別的第乙個字元.eg:   char *pos; strtol("123abc", &pos, 10);strtol返回123,pos指向字串中的字母a。

引數endptr不為null,則會將遇到不合條件而終止的nptr中的字元指標由endptr返回;若引數endptr為null,則會不返回非法字串。

double strtod(const char *nptr,char **endptr);字串轉換成浮點資料。

7、字串格式化輸出:sprintf(char* buffer,const char*formt,[agrument],...),buffer:將要寫入的字串緩衝區,format:格式化字串,,[agrument],...:可選引數,可以是任何型別的資料。

如果成功返回寫入buffer 的字元數,結束字元『\0』不計入內,出錯則返回-1.

如果 buffer 或 format 是空指標,且不出錯而繼續,函式將返回-1。

第二個引數中會寫入除格式外的資料到buffer,如 int num=sprintf(buffer,"string:%s\n",20); buffer中會儲存's','t','r','i','n','g',':','\n','\0'

num+=sprintf(buffer,"char:%c\n",c);   buffer中會儲存's','t','r','i','n','g',':','\n','c','h','a','r',':','c','\n','\0'

附測試**如下:(編譯器vs2015)

#define _crt_secure_no_warnings

#include

#include

#include

#define strlen 255

int main()

char *str = "1234444555";              //常量區,無法修改值  

char strarr = "111222333444";  

char strcarrier[strlen] = ;

size_t szlen = strlen(strarr);         //12  

size_t arrayles = sizeof(strarr);      //13

//strcat(str, strarr);  //錯誤,往某位置寫入時發生訪問衝突 str儲存在常量區

if ((strlen(strarr) + strlen(str) - 1) <= sizeof(strarr))  

strcat(strarr, str);    //風險的行為,字串溢位,覆蓋straar之後的空間

strcat(strcarrier, str);

strcat(strcarrier, strarr);

memset(strcarrier, 0, strlen);

strncat(strcarrier, str, 5);//擷取後面str中的資料,長度為5  

strncat(strcarrier, str, strlen-strlen(strcarrier));//最大長度strlen-strlen(strcarrier)

memset(strcarrier, 0, strlen);

strcpy(strcarrier, strarr);//str1的長度大於str2的長度,str1先清零然後將str2的內容copy進str1

int temp = strcmp(strcarrier, str);

temp = strcmp(strcarrier, strarr);  

temp = strncmp(strcarrier, "333", 5);//非零值  

temp = strncmp(strcarrier, "111555555", 3);//相等為0   3指的是str2裡面的前三位

memset(strcarrier, 0, strlen);

strncpy(strcarrier, "1122334455", 3);

memset(strcarrier, 0, strlen);

strcpy(strcarrier, str);

temp = int(strchr(strcarrier, '4'));//返回的是首次出現的指標

temp = int(strrchr(strcarrier, '4'));  

temp = int(strstr(strcarrier, "455"));

temp = atoi(strcarrier);

char *endptr = null;  

memset(strcarrier, 0, strlen);  

strcpy(strcarrier, str);

temp = strtol(strcarrier, &endptr, 10);

temp = strtol(strcarrier, &endptr, 16);

memset(strcarrier, 0, strlen);  

strcpy(strcarrier, "11122str11");  

strtol(strcarrier, &endptr, 16);

strcpy(strcarrier, "");  

sprintf(strcarrier, "%d", temp);

return 0;

C字串處理函式

void memccpy void dest,const void src,int c,size t n 從src所指向的物件複製n個字元到dest所指向的物件中。如果複製過程中遇到了字元c則停止複製,返回指標指向dest中字元c的下乙個位置 否則返回null。void memcpy void de...

C字串處理函式

void memccpy void dest,const void src,int c,size t n 從src所指向的物件複製n個字元到dest所指向的物件中。如果複製過程中遇到了字元c則停止複製,返回指標指向dest中字元c的下乙個位置 否則返回null。void memcpy void de...

C 字串處理函式

其函式原型為 strcat char,const char strcat是string catenate 字串連線 的縮寫 該函式有兩個字元陣列的引數,函式的作用是 將第二個字元陣列中的字串連線到前面字元陣列的字串的後面 第二個字元陣列被指定為const,以保證該陣列中的內容不會在函式呼叫期間修改 ...