繁体   English   中英

用strtok标记字符串

[英]Tokenize string with strtok

Example Text: 

bclk = /gsrpkg_te/gsrpkg/gsrdie/xxBCLK

我想问有关“ strtok”的问题。下面是一个示例代码,但我遇到了一些疑问。

char *p4;
char *p5;
p4 = strtok (eqvline, "=");
p5 = strtok (NULL, ":");
if ( !strcmp (p4, "bclk") ) {
   strcpy ( sa_de_bclk, p5 );
   printf ( "[vTPSim] ---> bclk = %s.\n", p5);
}

在上面的示例文本中,任何地方都没有":" (冒号)。对我的strtok()理解是,当未找到定义的符号时,会将NULL分配为结果。

但是,为什么在这种情况下,即使没有":"p5仍具有"/gsrpkg_te/gsrpkg/gsrdie/xxBCLK"分配。

感谢您的帮助。

根据我对strtok的理解,如果没有找到定义的符号,则将NULL分配为结果

也许您将strtok()strchr()strstr()混淆了。 如果在字符串的其余部分中未找到任何分隔符,则strtok()返回该其余部分(更准确地说,是指向其第一个字符的指针)。 如果根本找不到分隔符,则可能是整个字符串。 文件。

从文档中引用仇恨者和否认者:

如果找不到这样的字节, 则当前令牌扩展到 s1指向的字符串的末尾 ,并且随后对令牌的搜索将返回空指针。

随后。 不能立即找到更多分隔符的调用,而是紧跟其后的调用

如果第一个参数为NULL,则strtok尝试获取下一个标记。 由于第一个strtok调用是带有eqvline != NULL和token =strtok (eqvline, "=") ,第二个调用将在您的实例中找到下一个部分/ gsrpkg_te / gsrpkg / gsrdie / xxBCLK

也许您应该阅读strtok的本文档http://www.cplusplus.com/reference/cstring/strtok/

char * strtok(char * str,const char *分隔符);

对该函数的调用序列将str分成令牌,令牌是连续字符的序列,这些连续字符由作为定界符一部分的任何字符分隔。

首次调用时,该函数需要一个C字符串作为str的参数,该字符串的第一个字符用作扫描令牌的起始位置。 在随后的调用中,该函数需要一个空指针,并使用最后一个标记结束后的位置作为扫描的新起始位置。

当您查看示例时,我希望p4包含“ bclk”而不是“ bclk”,因为您没有将空格定义为定界符。 根据文档,在第4行(p5 = ...)上所做的操作没有定义的结果,因为您在strtok的调用之间更改了定界符。 我希望它使用第一个定界符,因此在“ =”之后返回字符串的其余部分。 它能做什么...

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM