Tag: token

当一行中有2个分隔符时,将字符串拆分为C中的标记

我正在使用strtok()函数将字符串拆分为Tokens。问题是当行中有2个分隔符时。 /* strtok example */ #include #include int main () { char str[] =”Test= 0.28,0.0,1,,1.9,2.2,1.0,,8,4,,,42,,”; char * pch; printf (“Splitting string \”%s\” into tokens:\n”,str); pch = strtok (str,”, “); while (pch != NULL) { printf (“Token = %s\n”,pch); pch = strtok (NULL, “, “); } return 0; } 并输出: Splitting string “Test= 0.28,0.0,1,,1.9,2.2,1.0,,8,4,,,42,,” into tokens: […]

有没有办法在C中计算令牌?

我正在使用strtok将字符串拆分为令牌。 有没有人知道任何实际计算令牌数量的函数? 我有一个命令字符串,我需要拆分它并将参数传递给execve() 。 谢谢! 编辑 execve将参数作为char** ,所以我需要分配一个指针数组。 我不知道有多少分配而不知道有多少令牌。

strtok()问题:如果标记由分隔符分隔,为什么分隔符和空’\ 0’之间的最后一个标记?

在下面的程序中, strtok()在主要部分按预期工作,但我无法理解一个发现背后的原因。 我读过关于strtok() : 为了确定令牌的开始和结束,该函数首先从起始位置扫描未包含在分隔符中的第一个字符(它成为令牌的开头)。 然后从令牌的这个开头开始扫描包含在分隔符中的第一个字符,这将成为令牌的结尾。 资料来源: http : //www.cplusplus.com/reference/cstring/strtok/ 而且我们知道, strtok()在每个令牌的末尾放置一个\0 。 但是在下面的程序中,最后一个分隔符是一个点( . ),之后在该点和引号( ” )之间有Toad 。现在,dot是我程序中的分隔符,但在Toad之后没有分隔符,甚至不是白色空间(这是我程序中的分隔符)。请清除以下由此前提产生的混乱: 为什么strtok()将Toad视为令牌,即使它不在2个分隔符之间? 这是我在遇到NULL字符( \0 )时读到的关于strtok() )的内容: 一旦在strtok的调用中找到了str的终止空字符,所有后续调用此函数并使用空指针作为第一个参数返回空指针。 资料来源: http : //www.cplusplus.com/reference/cstring/strtok/ 没有任何地方说过一旦遇到一个空字符,就会返回一个指向令牌开头的指针(我们甚至没有令牌,因为我们没有得到令牌的结尾,因为没有找到分隔符字符在从令牌的开头开始扫描之后(即从Toad的’T’开始),我们只发现了一个空字符, 而不是一个分隔符 。 那么为什么参数字符串的最后一个分隔符和引号之间的部分被strtok()视为一个标记? 请解释一下。 码: #include #include int main () { char str[] =” Falcon,eagle-hawk..;buzzard,gull..pigeon sparrow,hen;owl.Toad”; char * pch=strtok(str,” ;,.-“); while (pch != NULL) { […]

C – strtok上的意外分段错误(…)

我正在使用库的strtok(…),它似乎工作正常,直到结束条件,它导致分段错误和程序崩溃。 API声称strtok(…)将在没有更多令牌被找到时输出NULL,这意味着,我想,你必须捕获这个NULL才能终止你使用strtok运行的任何循环( …)。 我需要做什么才能捕获此NULL以防止程序崩溃? 我想象允许使用NULL作为终止条件。 我准备了一个SSCCE供你观察这种行为。 我需要strtok(…)来处理我正在编写的更大的软件,并且我得到完全相同的分段行为。 命令行的输出显示在此代码插图下方(是的,我知道您使用来封装库,但是我很难获得此post来显示代码库)。 我在Windows 8操作系统上使用gcc 4.5.3版本,下面显示了两种不同的方式,我想象一个人可以尝试在循环中捕获NULL。 #include #include #include #include #include #include #include main(){ char* from = “12.34.56.78”; char * ch = “.”; char * token = strtok(from, ch); printf(“%s\n”,token); while(token != NULL){ token = strtok(NULL, ch); printf(“%s\n”, token); } printf(“Broke out of loop!”); while(strcmp(token, 0) != 0){ printf(“%s\n”,token); token […]

如何使用strtok()

我正在编写一个C程序来研究strtok()用法的用法。 这是我的代码: #include #include main() { char abc[100] = “ls &”; char * tok; tok = strtok(abc, ” “); while(tok!=NULL) { printf(“%s”, tok); tok = strtok(NULL, ” “); } printf(“\n\n\n\n\n%s”, tok); return 0; } 它打印以下输出: ls& (null) 但我希望它在第二个printf声明中打印’&’。 我该怎么做? 我需要这部分作为我的作业项目。 谁能帮我吗? 先感谢您! 🙂