一、簡介
C語言中的strstr函數可以用於查找一個字元串中的子串。該函數的功能是在一個字元串中查找另一個字元串的首次出現,返回子串在主串中的起始位置。
二、使用方法
strstr函數的函數原型如下:
char *strstr(const char *str1, const char *str2);
其中,str1代表要查找的源字元串,str2代表要查找的目標字元串。如果函數找到目標字元串,則返回目標字元串第一次出現的地址;如果函數未找到目標字元串,則返回NULL。
使用該函數時需要注意主串和子串的區別:
#include <stdio.h> #include <string.h> int main() { char str1[] = "This is a test string"; char str2[] = "test"; char *ret; // 在str1中查找str2 ret = strstr(str1, str2); printf("函數返回的指針地址:%p\n", ret); printf("查找的字元串:%s\n", str2); printf("在字元串\"%s\"中找到\"%s\"的位置是:%d\n", str1, str2, ret - str1); return 0; }
運行結果如下:
函數返回的指針地址:0x7ffc7d409515 查找的字元串:test 在字元串"This is a test string"中找到"test"的位置是:10
三、注意事項
在使用strstr函數時需要注意以下幾個問題:
1. 區分大小寫
strstr函數默認是區分大小寫的,如果需要忽略大小寫,則需要自己實現一個大小寫轉換的函數。例如:
#include <stdio.h> #include <string.h> void strlwr(char *str) { while(*str) { if(*str >= 'A' && *str <= 'Z') { *str += 32; } str++; } } int main() { char str1[] = "This is a TEST string"; char str2[] = "test"; char *ret; // 將源字元串轉化為小寫 strlwr(str1); // 在str1中查找str2 ret = strstr(str1, str2); if (ret) { printf("找到了目標字元串\n"); } else { printf("未找到目標字元串\n"); } return 0; }
運行結果如下:
找到了目標字元串
2. 空指針的處理
在使用strstr函數時需要考慮源字元串和目標字元串為空的情況,因為如果傳入了空指針,程序很可能會因為訪問了未知的內存地址而崩潰。
#include <stdio.h> #include <string.h> int main() { char *str1 = NULL; char str2[] = "test"; char *ret; // 在str1中查找str2 ret = strstr(str1, str2); if (ret) { printf("找到了目標字元串\n"); } else { printf("未找到目標字元串\n"); } return 0; }
運行結果如下:
未找到目標字元串
3. 返回NULL的處理
如果strstr函數未能找到目標字元串,那麼它會返回NULL。因此,在使用strstr函數的返回值時需要做好錯誤處理。
#include <stdio.h> #include <string.h> int main() { char str1[] = "This is a test string"; char str2[] = "hello"; char *ret; // 在str1中查找str2 ret = strstr(str1, str2); if (ret) { printf("找到了目標字元串\n"); } else { printf("未找到目標字元串\n"); } return 0; }
運行結果如下:
未找到目標字元串
四、總結
strstr函數在C語言中是一個非常重要的字元串處理函數。通過本篇文章的介紹,我們了解了strstr函數的使用方法、注意事項以及常見錯誤。
原創文章,作者:BPQTU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/324591.html