3

我遇到了像 strtok_s 这样的函数,您需要将指针传递给指针参数。

strtok_r(char *restrict str, const char *restrict sep, char **restrict lasts);

使用方法是:

char *foo;
char *str = ...;
char *delimiter = ...;
strtok_r(str, delimiter, &foo);

想知道为什么将指针 foo 的地址传递给函数?

4

3 回答 3

2

这样就strtok可以从中断的地方继续。此版本strtok是线程安全的(因为它使用您提供的指针,而不是其他版本的内部指针)。

它将最后读取的令牌的地址保存在 a 中char *,因此您需要将指针传递给该指针,以便它可以更改值并将其返回给您。

于 2013-01-18T05:09:30.487 回答
1

因为strtokis 时不可重入strok_r。这意味着您不能安全地从多个线程调用它。为了解决这个问题,函数有必要将其状态存储在某处,这可以通过将指针传递给指针来完成,以便 strok_r 能够修改作为参数传递的指针(这是另一个指针)的值。

于 2013-01-18T05:12:35.323 回答
0

该函数strtok_r(str, delimiter, &foo)将其输出放入foo并需要一个指向它的指针,以便不只是替换(复制的)输入对象。

于 2013-01-18T05:10:03.540 回答