[英]Can't find documentation for strtok_s()
每個參數到底傳遞給它什么,它返回什么?
它比常規strtok
到底好多少?
請給我最簡單和基本的解釋。
這在ISO C11
標准的Appendix K (bounds checking interfaces)
中有詳細說明。 標准的此可選部分提供了標准核心部分中已提供的“更安全” (a)版本的已存在功能。
原型是:
char *strtok_s (
char * restrict s1,
rsize_t * restrict s1max,
const char * restrict s2,
char ** restrict ptr);
作為安全功能的一部分檢查的運行時約束為:
s1max
, s2
和ptr
必須全部為非空。 s1
為空指針,則*ptr
一定不能為空。 *s1max
的值必須小於或等於RSIZE_MAX
。 s1
的前*s1max
字符內 *s1max
字符內。 安全方面是,如果違反了這些約束中的任何一個,則不會在s1
或s2
上發生任何間接s2
並且不會通過ptr
存儲任何值。
除了這些額外的檢查,它幾乎與標准strtok
函數相同,它們從s1
返回令牌,並由s2
的定界符組分隔。 我認為ptr
的使用使其具有線程安全性,因為它使用了用戶(b)提供的非靜態狀態。
(a)引用是因為如果您知道如何正確使用它們,該標准的大多數部分已經是安全的:-)
(b) 仍然缺少的一件事是具有空令牌的能力,例如:
field1||||field5
因為strtok_s
(和原始的)對待||||
作為單個分隔符,我們必須找到其他方法來完成此操作</rant>
:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.