strtok不可折返,並轉換爲空標記。 sscanf可以工作,並可以爲您檢測數字或字符串列。
#include <stdio.h>
typedef struct {
char op[20];
union {int arg1num;char arg1str[20];} arg1;
char arg2[20],arg3[20];
} Value;
main()
{
Value v;
char withNumber[]="SMUL 9 A B ";
char withoutNumber[]="SMUL \"scalar\" \"matrix-1\" \"matrix-2\" ";
if(4==sscanf(withNumber,"%[^ ]%d %[^ ] %[^ ]",v.op,&v.arg1.arg1num,v.arg2,v.arg3))
printf("wN:%s %d %s %s\n",v.op,v.arg1.arg1num,v.arg2,v.arg3);
if(4==sscanf(withoutNumber,"%[^ ] %[^ 0-9] %[^ ] %[^ ]",v.op,v.arg1.arg1str,v.arg2,v.arg3))
printf("woN:%s %s %s %s\n",v.op,v.arg1.arg1str,v.arg2,v.arg3);
if(4==sscanf(withoutNumber,"%[^ ]%d %[^ ] %[^ ]",v.op,&v.arg1.arg1num,v.arg2,v.arg3))
printf("wN:%s %d %s %s\n",v.op,v.arg1.arg1num,v.arg2,v.arg3);
if(4==sscanf(withNumber,"%[^ ] %[^ 0-9] %[^ ] %[^ ]",v.op,v.arg1.arg1str,v.arg2,v.arg3))
printf("woN:%s %s %s %s\n",v.op,v.arg1.arg1str,v.arg2,v.arg3);
return 0;
}
如果您想限制讀取的數量(例如,20個字符將溢出這些數組),sscanf還允許字符串的寬度說明符('%19 [^]')。 – 2010-08-23 13:41:32