以分隔符’,'举例,从字符串中获取每一个参数的value:
#include "stdio.h"
#define MAX 20
typedef unsigned char uint8_t;
typedef struct
{
char *argv[MAX];
int argc;
}Params_t;
void buffToParams(char *buff, Params_t *params)
{
const char delimiters = ','; /*分隔符*/
uint8_t buflen = 0;
uint8_t i = 0;
buflen = strlen(buff); /*buff长度*/
if (0 == buflen)
{
params->argc = 0;
return;
}
else
{
params->argc = 1; /*长度不为0,初始数量argc赋1*/
params->argv[0] = &buff[0]; /*从头一个字符开始记下内容存到argv[0]中*/
for (i = 0; i < buflen; i++) /*循环读取字符串长度*/
{
if (delimiters == buff[i]) /*若碰到分隔符*/
{
buff[i] = 0; /*当前分隔符赋0*/
params->argv[params->argc] = &buff[i + 1]; /*从分隔符的下一个字符开始,存入argv[1]中*/
params->argc += 1; /*argc++*/
}
}
return;
}
}
int main(void)
{
Params_t params;
char input[100];
gets(input);
printf("Input:%s\r\n", input);
buffToParams(input, ¶ms);
if (params.argc == 0)
{
printf("Error:Empty\r\n");
}
else
{
printf("The total number of argc: %d\r\n", params.argc);
for (int i = 0; i < params.argc; i++)
{
printf("params[%d] = %s\r\n", i, params.argv[i]);
}
}
return 0;
}
运行效果:
限定输入格式的用法举例:
#include "stdio.h"
#define MAX 20
typedef unsigned char uint8_t;
typedef struct
{
char *argv[MAX];
int argc;
}Params_t;
void buffToParams(char *buff, Params_t *params)
{
const char delimiters = ','; /*分隔符*/
uint8_t buflen = 0;
uint8_t i = 0;
buflen = strlen(buff); /*buff长度*/
if (0 == buflen)
{
params->argc = 0;
return;
}
else
{
params->argc = 1; /*长度不为0,初始数量argc赋1*/
params->argv[0] = &buff[0]; /*从头一个字符开始记下内容存到argv[0]中*/
for (i = 0; i < buflen; i++) /*循环读取字符串长度*/
{
if (delimiters == buff[i]) /*若碰到分隔符*/
{
buff[i] = 0; /*当前分隔符赋0*/
params->argv[params->argc] = &buff[i + 1]; /*从分隔符的下一个字符开始,存入argv[1]中*/
params->argc += 1; /*argc++*/
}
}
return;
}
}
int main(void)
{
Params_t params;
char input[100];
char *ptr = NULL;
gets(input);
printf("Input:%s\r\n", input);
if (NULL != strstr(input, "String="))
{
ptr = "String=";
}
else
{
printf("Error:Wrong input format\r\n");
return;
}
buffToParams(input + strlen(ptr), ¶ms);
if (0 == params.argc)
{
printf("Error:Empty\r\n");
}
else
{
printf("The total number of argc: %d\r\n", params.argc);
for (int i = 0; i < params.argc; i++)
{
printf("params[%d] = %s\r\n", i, params.argv[i]);
}
}
return 0;
}
错误输入格式:
正确输入格式: