c - C中查询字符串的优雅解析

标签 c refactoring c99

我正在尝试用 C 语言解析 URL 查询字符串,但我不知道如何优雅地完成它。任何提示或建议将不胜感激:

static void readParams(char * string, char * param, char * value) {
    char arg[100] = {0};  // Not elegant, brittle
    char value2[1024] = {0};

    sscanf(string, "%[^=]=%s", arg, value2);
    strcpy(param, arg);
    strcpy(value, value2);
}
char * contents = "username=ted&age=25";
char * splitted = strtok (contents,"&");
char * username;
char * age;

while (splitted != NULL)
{
    char param[100]; // Not elegant, brittle
    char value[100];
    char * t_str = strdup(splitted);
    readParams(t_str, param, value);
    if (strcmp(param, "username") == 0) {
        username = strdup(value);
    }
    if (strcmp(param, "age") == 0) {
        age = strdup(value); // This is a string, can do atoi
    }
   splitted = strtok (NULL, "&");
 }

我一直遇到的问题是,由于 strtok 函数,在最后一个 strtok 函数似乎打破 while 循环之前,任何看起来更智能的事情都会发生。

最佳答案

您要么需要定制复杂而有效的解析器,要么选择可以为您完成的库。

uriparser应该提供你需要的一切(加上它支持 unicode)。

关于c - C中查询字符串的优雅解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661502/

相关文章:

c - 我应该使用什么文档工具来处理这个问题?

java - 删除执行多个验证的代码片段中的重复项

c - 为什么 ftell 的返回类型不是 fpos_t?

java - 创建一个长度由用户输入 : C vs C99 vs Java 决定的数组

c# - 加速解析算法

C99 删除 stricmp() 和 strnicmp()?

c - 在 C 中进行合并排序时不断获取垃圾值

c - 将 256 位 key 打入 32 位轮 key 的问题

c - 读取txt文件中的特定字符串并将该字符串转换为int C

java - 重构枚举后 db4o 的奇怪行为