#include <stdio.h>
#include <string.h>
//Splits the input by the / character and prints the content in between
//the / character. The input string will be changed
void printContent(char *input)
{
char *p = strtok(input, "/");
while(p)
{
printf("%s, ",p);
p = strtok(NULL, "/");
}
}
int main(void)
{
char buffer[] = "abc/def/ghi:ABC/DEF/GHI";
char *p = strtok(buffer, ":");
while(p)
{
printContent(p);
puts(""); //print newline
p = strtok(NULL, ":");
}
return 0;
}
3条答案
按热度按时间uurv41yg1#
uxhixvfz2#
您可以使用
strtok()
ee7vknir3#
为什么
strtok()
是个坏主意不要在正常代码中使用
strtok()
,strtok()
使用static
变量会有一些问题。在嵌入式微控制器的某些用例中,static
变量有意义,但在大多数其他情况下应避免使用它们。当多个线程使用strtok()
时,strtok()
会出现异常行为。在中断中使用它时,或者在其他一些情况下,在对strtok()
的连续调用之间处理多个输入时。您可能会看到以下输出:
但你会得到
这是因为在
printContent()
中调用strtok()
,重置main()
中生成的strtok()
的内部状态,返回后strtok()
的内容为空,下一次调用strtok()
返回NULL
。你应该做什么
当你使用POSIX系统时你可以使用
strtok_r()
,这个版本不需要static
变量。如果你的库没有提供strtok_r()
,你可以自己编写它的版本。这应该不难,而且Stackoverflow不是一个编码服务,你可以自己编写它。