RTSP協議的一些分析(一)——部分字符串函數的使用

PTSP協議介紹

RTSP協議的一些分析(一)——部分字符串函數的使用

RTSP協議的一些分析(二)——printf類似函數、sscanf以及log保存到內存中(printf輸入重定位)

目錄

一、源碼1及其用到的字符串函數

      strcat、strchr和strrchr、strtok、strstr

二、源碼2及其用到的字符串函數

      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不區分大小寫。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章