我遇到了像 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 的地址传递给函数?
这样就strtok
可以从中断的地方继续。此版本strtok
是线程安全的(因为它使用您提供的指针,而不是其他版本的内部指针)。
它将最后读取的令牌的地址保存在 a 中char *
,因此您需要将指针传递给该指针,以便它可以更改值并将其返回给您。
因为strtok
is 时不可重入strok_r
。这意味着您不能安全地从多个线程调用它。为了解决这个问题,函数有必要将其状态存储在某处,这可以通过将指针传递给指针来完成,以便 strok_r 能够修改作为参数传递的指针(这是另一个指针)的值。
该函数strtok_r(str, delimiter, &foo)
将其输出放入foo
并需要一个指向它的指针,以便不只是替换(复制的)输入对象。