C: strtok_r的正确使用 [英] C: correct usage of strtok_r

查看:22
本文介绍了C: strtok_r的正确使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 strtok_r 而不是 strtok 来执行此操作?

How can I use strtok_r instead of strtok to do this?

char *pchE = strtok(NULL, " ");

现在我正在尝试正确使用 strtok_r...但有时我会遇到 strtol 的问题.我有一个线程,我执行了 10 次(同时).

Now I'm trying to use strtok_r properly... But sometimes I get problems with the strtol. I have a thread that I execute 10 times (at the same time).

char *savedEndd1;
char *nomeClass = strtok_r(lineClasses, " ", &savedEndd1);
char *readLessonS = strtok_r (NULL, " ", &savedEndd1);
char *readNTurma = strtok_r(NULL, " ",  &savedEndd1);

if (readNTurma==NULL)
printf("CLASS STRTOL begin %s %s
",nomeClass, readLessonS );
int numberNTurma = strtol(readNTurma, NULL, 10);

而且我多次发现 readNTurma == NULL ......这是为什么呢?不明白为什么会出现NULL?

And I'm catching that readNTurma == NULL several times... Why is that? Cant understand why it comes NULL?

推荐答案

文档for strtok_r 很清楚.

The documentation for strtok_r is quite clear.

strtok_r() 函数是一个可重入版本的 strtok().saveptr 参数是一个指向 char * 变量的指针,strtok_r() 内部使用该变量来维护解析相同字符串的连续调用之间的上下文.

The strtok_r() function is a reentrant version strtok(). The saveptr argument is a pointer to a char * variable that is used internally by strtok_r() in order to maintain context between successive calls that parse the same string.

在第一次调用 strtok_r() 时,str 应该指向要解析的字符串,并且忽略 saveptr 的值.在后续调用中,str 应为 NULL,并且 saveptr 应自上次调用以来保持不变.

On the first call to strtok_r(), str should point to the string to be parsed, and the value of saveptr is ignored. In subsequent calls, str should be NULL, and saveptr should be unchanged since the previous call.

所以你会有类似的代码

char str[] = "Hello world";
char *saveptr;
char *foo, *bar;

foo = strtok_r(str, " ", &saveptr);
bar = strtok_r(NULL, " ", &saveptr);

这篇关于C: strtok_r的正确使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆