簡體   English   中英

找不到strtok_s()的文檔

[英]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);

作為安全功能的一部分檢查的運行時約束為:

  • 指針s1maxs2ptr必須全部為非空。
  • 如果s1為空指針,則*ptr一定不能為空。
  • *s1max的值必須小於或等於RSIZE_MAX
  • 找到的令牌的結尾必須出現在首次調用的s1的前*s1max字符內
  • 找到的令牌的末尾必須出現在隨后的調用中恢復搜索的前*s1max字符內。

安全方面是,如果違反了這些約束中的任何一個,則不會在s1s2上發生任何間接s2並且不會通過ptr存儲任何值。

除了這些額外的檢查,它幾乎與標准strtok函數相同,它們從s1返回令牌,並由s2的定界符組分隔。 我認為ptr的使用使其具有線程安全性,因為它使用了用戶(b)提供的非靜態狀態。


(a)引用是因為如果您知道如何正確使用它們,該標准的大多數部分已經是安全的:-)


(b) 仍然缺少的一件事是具有空令牌的能力,例如:

field1||||field5

因為strtok_s (和原始的)對待|||| 作為單個分隔符,我們必須找到其他方法來完成此操作</rant> :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM