需求:從 init: STOREB Z cell 提取冒號後內容,跳過空白
格式字串技巧
%*[^:] // 讀取並丟棄非冒號字元
: // 匹配冒號
%s // 讀取下一個非空白字串 (自動跳過空白)
完整程式碼
#include <stdio.h>
int main()
{
char line[] = "init: STOREB Z cell";
char token[80];
// 提取冒號後第一個單字
if (sscanf(line, "%*[^:]:%s", token) == 1)
printf("第一欄: %s\n", token); // 輸出 STOREB
// 提取冒號後完整剩餘字串 (含空白)
char rest[200];
if (sscanf(line, "%*[^:]:%[^\n]", rest) == 1)
printf("剩餘: %s\n", rest); // 輸出 " STOREB Z cell"
return 0;
}
關鍵點
%[^:] 掃描集:匹配非冒號字元。
* 抑制賦值:不佔用引數。
%s 自動跳過前導空白,遇空白停止;%[^\n] 讀取至行尾 (含空白)。
- 若冒號可能不存在,建議先用
strchr 定位再處理,避免 sscanf 匹配失敗導致未初始化變數被使用。