Glib 字符串实用函数(相当于 strcspn)
Glib string utility functions (echivalent for strcspn)
我想提取第一次出现“/”后存在的字符串
例如,a 有一个以下形式之一的 char *card:
hw:0/Line
default/Master
我需要 char *channel (Line, Master, ...)
在标准 C 中可以使用 "strcspn" 和 "strlen"
char *card, *channel;
int i;
i = strcspn(card, "/");
if (i == strlen(card)) {
channel = "Master";
} else {
card[i] = 0;
channel = card + i + 1;
}
如何使用 glib 字符串实用程序函数执行此操作?
strcspn
和 strlen
有什么问题?
GLib 重新实现了很多 C99 和 POSIX 的东西,因为它针对 C89 编译器。它不会重新实现 strlen
或 strcspn
之类的东西,因为没有必要——它们在 C89 中。
GLib 也倾向于实现很多函数的 UTF-8 版本,虽然有一个 g_utf8_strlen
我不知道 g_utf8_strcspn
我认为这不是真的必要在这种情况下。如果是,那么您可能必须自己实现它,方法是使用 g_utf8_next_char
遍历字符串并检查 g_utf8_get_char
或 g_utf8_get_char_validated
.
的结果
我想提取第一次出现“/”后存在的字符串
例如,a 有一个以下形式之一的 char *card:
hw:0/Line
default/Master
我需要 char *channel (Line, Master, ...)
在标准 C 中可以使用 "strcspn" 和 "strlen"
char *card, *channel;
int i;
i = strcspn(card, "/");
if (i == strlen(card)) {
channel = "Master";
} else {
card[i] = 0;
channel = card + i + 1;
}
如何使用 glib 字符串实用程序函数执行此操作?
strcspn
和 strlen
有什么问题?
GLib 重新实现了很多 C99 和 POSIX 的东西,因为它针对 C89 编译器。它不会重新实现 strlen
或 strcspn
之类的东西,因为没有必要——它们在 C89 中。
GLib 也倾向于实现很多函数的 UTF-8 版本,虽然有一个 g_utf8_strlen
我不知道 g_utf8_strcspn
我认为这不是真的必要在这种情况下。如果是,那么您可能必须自己实现它,方法是使用 g_utf8_next_char
遍历字符串并检查 g_utf8_get_char
或 g_utf8_get_char_validated
.