C語言strstr()函數使用注意事項

最近在寫一段C語言代碼時用到了strstr()函數,遇到了一個意想不到的問題,記錄一下。
這個函數接收兩個參數,strstr(str1,str2)函數具體功能是檢測str2是否爲str1的子集,如果是則返回str1首次出現的地址,否則返回NULL
一開始調用這個函數的時候沒想太多,直接使用後發現有些情況下儘管str2是str1的子集,函數返回值也是NULL。經過排查後發現如果在傳入參數str1的數組中包含str2,但是在str2出現前有值爲0x00 或 ‘\0’的數組元素,函數就會返回NULL。根據這一現象,盲猜這是此函數的執行結束機制,即當函數檢測到str1中出現0x00或’\0’時,立即return。
下面用程序驗證一下:

int main()
{
	char str1[6]={'a','b','c','d','e'};		
    char str2[]="cd";
    char *n;		
    n=strstr(str1,str2);				//將函數返回值賦值給n
    printf("&str1:%d\n",str1);		//打印str1數組首地址
    printf("&str2:%d\n",str2);
    printf("    n:%d\n",n);			//打印n的值
	system("pause");
	return 0;
}

執行結果:
在這裏插入圖片描述
可以看出n的值爲6356744,比str1首地址大2,也就是str2首次出現的地址。
這個時候將str1[0]改爲0x00或’\0’,運行結果如下:
在這裏插入圖片描述
這個時候n的值爲0,說明strstr()函數執行到str1[0]時就return 0。

原文鏈接: https://www.jhxblog.cn/article/?articleid=3

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