RTSP協議的一些分析(二)——printf類似函數、sscanf以及log保存到內存中(printf輸入重定位)
目錄
strcat、strchr和strrchr、strtok、strstr
strcmp、strncmp、stricmp、strnicmp
一、源碼1及其用到的字符串函數
#include <stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
const char *str1 = "abcd";
const char *str2 = "efgcc";
char str3[100]={0};
char *end_ptr;
char *token;
char str4[100] = "abc/def/hjgc/uuuu";
/* char *strcat(char *dest, const char *src) */
strcat(str3,str1);
printf("1,strcat str3 = %s\n",str3);
strcat(str3,str2);
printf("2,strcat str3 = %s\n",str3);
/* char *strchr(const char *s, int c) */
end_ptr = strchr(str4,'/');
printf("3,strchr end_ptr = %s,the index = %ld\n",end_ptr,end_ptr-str4-1);
/* char *strrchr(const char *s, int c) */
end_ptr = strrchr(str4,'/');
printf("3,strrchr end_ptr = %s,the index = %ld\n",end_ptr,end_ptr-str4-1);
/* char *strtok(char *str, const char *delim) */
/* char *strtok_r(char *str, const char *delim, char **saveptr) */
token = strtok(str4,"/");
printf("4,strtok str4 = %s\n",str4);
if(token)
{
while(token)
{
printf("5,strtok token = %s\n",token);
token = strtok(NULL,"/");
}
}
/* char *strstr(const char *haystack, const char *needle) */
char *str6 = "abc/def/hjgc/uuuu";
char *str7 = "/def";
token = strstr(str6,str7);
if(token)
{
printf("6,strtok token = %s\n",token);
}
else
{
printf("6,no substring\n");
}
return 0;
}
運行結果:
1,strcat str3 = abcd
2,strcat str3 = abcdefgcc
3,strchr end_ptr = /def/hjgc/uuuu,the index = 2
3,strrchr end_ptr = /uuuu,the index = 11
4,strtok str4 = abc
5,strtok token = abc
5,strtok token = def
5,strtok token = hjgc
5,strtok token = uuuu
6,strtok token = /def/hjgc/uuuu
1.strcat
char *strcat(char *dest, const char *src);
把src所指向的字符串(包括“\0”)複製到dest所指向的字符串後面(刪除*dest原來末尾的“\0”)。要保證*dest足夠長,以容納被複制進來的*src。*src中原有的字符不變。返回指向dest的指針。
2. strchr和strrchr
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
在參數str所指向的字符串中搜索第一次(strchr)或者最後一次(strrchr)出現字符c(一個無符號字符)的位置。
返回一個指向該字符串中第一次(strchr)或者最後一次(strrchr)出現的字符的指針,如果字符串中不包含該字符則返回NULL空指針。
3. strtok
char *strtok(char *str, const char *delim);
strtok()用來將字符串分割成一個個片段。參數s指向欲分割的字符串,參數delim則爲分割字符串中包含的所有字符。當strtok()在參數s的字符串中發現參數delim中包含的分割字符時,則會將該字符改爲\0 字符。在第一次調用時,strtok()必需給予參數s字符串,往後的調用則將參數s設置成NULL。每次調用成功則返回指向被分割出片段的指針。
4. strstr
char *strstr(const char *haystack, const char *needle);
strstr(str1,str2) 函數用於判斷字符串str2是否是str1的子串。如果是,則該函數返回 str1字符串從 str2第一次出現的位置開始到 str1結尾的字符串;否則,返回NULL。
二、源碼2及其用到的字符串函數
#include <string.h>
#include <stdio.h>
int main(int argc,char **argv)
{
char *str1="I am OldWolf";
char *str2="I am Oldwolf";
char *str3="http://www.baidu.com";
char *str4="http5";
int cmp;
printf("原字符串分別爲:\n%s\n%s\n\n",str1,str2);
cmp=strcmp(str1,str2);
if (cmp!=0)
printf("strcmp比較字符串不相同!\n");
else
printf("strcmp比較字符串相同!\n");
cmp=stricmp(str1,str2);
if (cmp!=0)
printf("stricmp比較字符串不相同!\n");
else
printf("stricmp比較字符串相同!\n");
cmp=strnicmp(str3,str4,4);
if (cmp!=0)
printf("strnicmp比較字符串不相同!\n");
else
printf("strnicmp比較字符串相同!\n");
return 0;
}
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
int stricmp(const char *s1, const char *s2);
int strnicmp(const char *s1, const char *s2, size_t n);
strcmp和strncmp區分大小寫,stricmp和strnicmp不區分大小寫。