gpt4 book ai didi

c - 在 C 中,如何在尝试标记化之前测试剩余 strtok 字符串中的 NULL 值

转载 作者:行者123 更新时间:2023-11-30 21:00:32 24 4
gpt4 key购买 nike

在继续标记 strtok 之前,我无法弄清楚如何测试 NULL 值。

给定

char* myStr = "a,b,c";
char item_a[1];
char item_b[1];
char item_c[1];
strcpy(item_a, strtok( myStr, ","));
strcpy(item_b, strtok( NULL, ","));
strcpy(item_c, strtok( NULL, ","));

按预期生成

item_a = a
item_b = b
item_c = c

但是,以下内容在 strcpy(item_c, strtok( NULL, ",")); 上给出了段错误,如何在 中测试 NULL >strtok( NULL, 实际上不是 NULL,如果你明白我的意思吗?

char* myStr = "a,b";
char item_a[1];
char item_b[1];
char item_c[1];
strcpy(item_a, strtok( myStr, ","));
strcpy(item_b, strtok( NULL, ","));
strcpy(item_c, strtok( NULL, ","));

最佳答案

不要立即使用 strtok 的返回值,而是将其保存在指针中并先进行测试。

来自手册页:

The strtok() and strtok_r() functions return a pointer to the next token, or NULL if there are no more tokens.

因此,当 strtok 返回 NULL 时,您就知道您位于字符串的末尾。

char* myStr = "a,b,c", *p;
char item_a[2];
char item_b[2];
char item_c[2];
p = strtok( myStr, ",");
if (p) {
strcpy(item_a, p);
p = strtok( NULL, ",");
if (p) {
strcpy(item_b, p);
p = strtok( NULL, ",");
if (p) {
strcpy(item_c, p);
}
}
}

此外,请确保目标字符串中有足够的空间容纳每个标记。出现段错误的原因是您的数组不够大。您需要足够的字符串长度加上一个终止字符串的空字节。

关于c - 在 C 中,如何在尝试标记化之前测试剩余 strtok 字符串中的 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com