部分參考百科。
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,以保證該陣列中的內容不會在函式呼叫期間修改 ...