c - 字符串解析,纯 C
问题描述
我有一个带有允许标记的动态分配数组。在每个令牌用户应该写一个数字,这将用于定义一个变量的值[ $ program --token=99
]; 如何解析最后一个数字?
这是代码:
/* libs */
#define TOKENS_QT 5
#define TOKEN_SIZE 6
static uint8_t GRID_WIDTH;
int main (const int argc, const char* argv[]) {
if (strncmp(argv[1], "--help", 6)) {
/* Here is some info about usage. */
return 0;
} else if (strncmp(argv[1], "--std", 5)) {
/* Here is standard set up. */
} else if (argc == TOKENS_QT + 1) {
char** tokens = malloc(TOKENS_QT * TOKEN_SIZE);
tokens = (char* [TOKENS_QT]) { "--sgw=", "--sgh=", "--sdq=",
"--shq=", "--soq=" };
for (register uint8_t i = 0; i < TOKENS_QT; ++i) {
if (strncmp(argv[i + 1], tokens[i], 6)) {
switch(i) {
case 0: // --sgw=
/* some cool actions to parse --sgw=99, for example, into 99 */
/* some actions to check validity of given number */
GRID_WIDTH = 99;
break;
/* There are other tokens handling. */
}
}
}
free(tokens);
} else {
/* Here is again info about correct usage. */
return 0;
}
return 0;
}
解决方案
您可以使用sscanf()
它来解析它。
sscanf(argv[i + 1], "--sgw=%d", &GRID_WIDTH);
如果您不想--sgw=
输入格式字符串,可以执行以下操作:
sscanf(argv[i+1]+6, "%d", &GRID_WIDTH);
添加6
跳过--sgw=
参数中的前缀。
推荐阅读
- javascript - Steam Bot - 发送您的交易报价时出错。请稍后再试。(26)
- crud - 类 DateTime 的 EasyAdmin 3 对象无法转换为字符串
- java - 如何使文件路径与嵌入式数据库兼容?(Apache Derby 嵌入式)
- aws-codepipeline - AWS 代码管道手动批准超时
- angular - 如何在 matBadge 之类的“之后”中设置 mat-mini-fab
- macos - 有没有办法在 Mac 上使用 lldb 或其他方式进入内核代码?
- android - 如何在未来数据上重新加载屏幕
- javascript - 大型解决方案的全局原型 (JavaScript/Node)
- sql - 将值添加到已存在的行的新列 - 大表
- javascript - 错误:ER_WARN_DATA_OUT_OF_RANGE:第 1 行列“vehicleModel”的值超出范围