状态机其实就是用标志位表示事物所处的状态。我现在用状态机实现int main(int argc,char *argv[])中的argc和argv[]。
argc即统计输入的参数个数
argv[]即存储各个参数的首地址
#include<stdio.h>
char str[128]="./a.out 100 200";
char *argv[20]={};
int argc=0,state=0,i=0; //state是标志位
void parse(void)
{
while(str[i])
{
if(state == 0 && str[i] != ' ') //当标志位为0且不是空格时
{
state=1; //状态改变
argv[argc++]=str+i; //指针数组记录参数首地址
}
if(state ==1 && str[i] == ' ') //当标志位为1且是空格时
{
state=0; //状态改变
str[i]='\0'; //读取某个参数结束,设置结束符
}
i++;
}
}
int main(void)
{
printf("%s\n",str);
parse();
printf("argc=%d\n",argc);
for(i=0;i<argc;i++)
printf("argv[%d]=%s\n",i,argv[i]);
return 0;
}