在这个示例程序中,我使用strtok_r
将字符串拆分为两个标记。
#include <stdio.h>
#include <string.h>
int main(void) {
char buf[] = "Hello World!";
char tok[] = " ";
char *p;
char *retStr = strtok_r(buf, tok, &p);
printf("\"%s\" \"%s\"\n", retStr, p);
return 0;
}
该程序的输出是
"Hello" "World!"
根据man page,p
内部使用指针strtok_r
进行重新输入。是否也可以安全地假设它指向字符串的其余部分,就像我在这里一样?
答案 0 :(得分:1)
不,这不安全。文档仅说明strtok_r
使用指针用于内部目的,strtok_r
调用之间不应更改它。这意味着,虽然你现在观察它指向字符串的其余部分,但它有点意外,库的实现者可以改变它 - 然后你的程序因外部库的更改而停止工作。我会避免这种不必要的依赖。
答案 1 :(得分:1)
除非特别说,否则你可以指望它是某种东西,而不是你能做到的。
关于如何使用某些内容的文档模糊不清,允许开发人员改变版本之间的使用方式,而不会发生重大变化。所以,虽然你现在正在做的事情可能会有效,但是没有人会保证它可以与下一版的图书馆一起使用。