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不区分大小写。