首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言 strchr 函數權威指南:原型、行為、陷阱與替代方案

     編輯:C 語言問答

標準原型 (C89 起)

#include <string.h>
char *strchr(const char *s, int c);

核心行為

  • 在字串 s (含結束符 \0) 中尋找 **首個** 與 (char)c 相等的字符。
  • **返回值**:
    • 找到 → 指向該字符的指標 (char *)。
    • 未找到 → NULL。
  • 可用於檢測字符是否存在:if (strchr(s, '.')) 判斷 s 是否含小數點。

常見誤區對照

誤區事實
「返回 void」返回 char *,調試器若顯示 void 可能為符號表缺失或強制轉型
「修改原字串」**不修改**,const char * 參數保證只讀
「找子字串」僅找**單字符**,子字串用 strstr
「區分大小寫」**嚴格區分**,'A' != 'a'

配套函數家族

函數功能返回
strchr正向找字符首次位址 / NULL
strrchr反向找字符 (最後一次)最後位址 / NULL
strstr找子字串首次位址 / NULL
strpbrk找字符集合中任一字符首次位址 / NULL
strcspn計算不含字符集合的前綴長度size_t
strspn計算僅含字符集合的前綴長度size_t

實戰片段


// 1. 去除換行符 (fgets 讀取後常用)
char *nl = strchr(line, '\n');
if (nl) *nl = '\0';

// 2. 解析 "key=value" 格式
char *eq = strchr(buf, '=');
if (eq) {
    *eq = '\0';
    char *key = buf;
    char *val = eq + 1;
    // ...
}

// 3. 判斷字串是否為純數字
int is_all_digits(const char *s) {
    return strspn(s, "0123456789") == strlen(s);
}

性能提示

  • 標準庫實現通常為 **手寫組合語言優化** (SIMD 掃描),極難手寫超越。
  • 極短字串 (≤ 16 字節) 簡單循環可能因函數調用開銷較慢,但可忽略。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved