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。
我正在制作一个非常简单的 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。