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