C - 将带有重复分隔符字符的字符串拆分为 2 个子字符串

C - Split string with repeated delimiter char into 2 substrings

我正在制作一个非常简单的 C 程序来模拟 export 命令,使用 fgets() 获取输入。

输入示例:

KEY=VALUE

必须转换为:

setenv("KEY", "VALUE", 1);

使用类似于此代码的东西很容易解决:

key = strtok(aux, "=");
value = strtok(NULL, "=");

当用户输入一个以一个或几个等于 = 字符开头的值时,就会出现问题。例如:

KEY===VALUE

这应该转换为:

setenv("KEY", "==VALUE", 1);

但是使用我当前的代码,它被转换为:

setenv("KEY", NULL, 1);

我该如何解决这个问题?

谢谢指教。

您的第二个 strtok() 不应使用 = 作为分隔符。只有当有另一个 = 结束该值时,您才会这样做。但是值在字符串的末尾结束。这部分使用空分隔符。

key = strtok(aux, "=");
value = strtok(NULL, "");

strtok 只是一个标记时,它可能有点矫枉过正(并且不可重入)。这样就可以了,

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
    char *key, *equals, *value;
    if(argc != 2 || !(equals = strchr(key = argv[1], '=')))
       return fprintf(stderr, "KEY=VALUE\n"), EXIT_FAILURE;
    value = equals + 1;
    *equals = '[=10=]';
    printf("key: <%s>; value: <%s>.\n", key, value);
    return EXIT_SUCCESS;
}

虽然 strtok 可能更容易阅读。可以尝试 strsep,但它是 GNU C。