如何在 c 中使用 2 个 strtok?

How can i use 2 strtok in c?

本文关键字:strtok      更新时间:2023-10-16

im 在 C 中工作,我在这方面有点新。 我有这个字符串:

7EB3A50110140F3955025607EB7A50110140F3957730188

数据包从"7E"开始,所以我使用 strtok(string,"E"( 来分隔其中的 2 个数据包

B3A50110140F3955025607
B7A50110140F39577301887

现在我想消除每个令牌的 A、B、F,所以我提出了这个想法:

while(token!=NULL)
{
cout<<"addrT:"<<&token<<" value: "<<token<<"n";
token=strtok(NULL,"E");
char *token1=strtok(token,"ABCDEF");
while(token1!=NULL){
token=strtok(NULL,"ABCDEF");
}
cout<<"addrT1:"<<&token<<" value: "<<token<<"n";
}

它根本不起作用,所以我想用这个代码检查每个令牌的地址:

token=strtok(string,"E");
while(token!=NULL)
{
cout<<"addrT:"<<&token<<" value: "<<token<<"n";
token=strtok(NULL,"E");
char *token1=strtok(token,"ABCDEF");
cout<<"addrT1:"<<&token<<" value: "<<token<<"n";
}

我发现第二个令牌使用与我的第一个令牌相同的内存地址,那么我应该怎么做才能获得带有值的新令牌?

提前致谢

如果你的库支持它(即定义__STDC_LIB_EXT1__(,你可以使用strtok_s.请注意,在包含<string.h>之前,您必须定义要1__STDC_WANT_LIB_EXT1__,因为strtok_s是标准的可选扩展。

如果要为 POSIX 目标编码,则可以使用strtok_r.

请注意,我还没有检查您的示例代码是否存在错误;注释表明除了需要两个独立的strtok调用之外,您可能还有其他问题。

也许你实际上得到了一个不同的令牌。 您将第一次 strtok 调用返回的指针存储在token中,将第二次调用返回的指针存储在token1中,但两个输出语句都token并且都没有发出token1。 这就是值相同的原因。