作爲其他C庫函數,如strcpy
,strcat
,有一個版本限制字符串的大小(strncpy
等),我想知道爲什麼沒有這樣的變體strchr
?爲什麼沒有strnchr功能?
回答
它確實存在 - 它被稱爲memchr
:
請注意,'memchr'不是* exacly *可能會出現'strnchr'可能會做的事情,因爲如果memchr比n的參數短,它不會停在字符串的末尾(即它可以讀取字節超出'\ 0',與'strchr'不同]。 'memchr'的「n-less」等價物不是'strchr',而是'rawmemchr',一個非POSIX和C99的GNU擴展。 – anol
所以'#define strnchr(haystack,needle,length)memchr(haystack,needle,strnlen(haystack,length))'應該這樣做吧? –
在C中,術語「字符串」通常表示「以空字符結尾的字符串」,並且str*
函數對這些類型的字符串進行操作。您提到的功能中的n
大多是爲了控制輸出。
如果您想要在沒有任何隱含終止語義的任意字節字節序列上運行,請使用mem*
系列函數;在你的情況下,memchr
應該滿足你的需求。
良好洞察力,但爲輸入字符串提供邊界的現有功能的示例是'strncmp()'和'printf(「%。* s」,n,s);'。請注意,'strncmp'的適當手冊頁可以避免說它將字符串作爲參數,但BSD和GNU手冊頁在這方面有點草率。另一方面,C標準措辭完美。 –
還有POSIX的'strnlen()'。 –
@PascalCuoq:有趣。我可能會看兩次任何算法,這些算法被認爲是'strnlen'的一個好用例。 –
- 1. scrapy:爲什麼沒有用parse_item功能
- 2. 爲什麼功能沒有定義python
- 3. 爲什麼沒有lubridate :::更新功能?
- 4. 爲什麼沒有任何維基軟件有補丁功能?
- 5. 爲什麼我們有clojure memoize功能?
- 6. 爲什麼Redis具有Pub/Sub功能?
- 7. 爲什麼有'!'之前'功能($){}(window.jQuery)'?
- 8. 爲什麼在idris中沒有Stream的過濾功能?
- 9. 沒有定義「方塊」爲什麼這個功能比較慢?
- 10. 爲什麼我的功能沒有運行?
- 11. 爲什麼onclick fire下一個功能沒有分配給它?
- 12. 爲什麼功能從來沒有叫REDX thunk
- 13. 爲什麼沒有功能顯示實例?
- 14. Php爲什麼在php中沒有排除功能?
- 15. 爲什麼沒有從Node.js的無功能fs.exists在Ubuntu
- 16. 爲什麼沒有設置超時功能激活win語句?
- 17. 爲什麼在ember.js中沒有實現單選按鈕功能?
- 18. 爲什麼我的功能沒有被調用?
- 19. (JavaScript)的爲什麼沒有功能拍攝參數
- 20. 爲什麼我的功能沒有定義?
- 21. 爲什麼沒有在指針的char *功能
- 22. 爲什麼我的功能沒有提到正確的路線?
- 23. 爲什麼拖動功能沒有在jQuery中觸發
- 24. 爲什麼沒有在打字稿中檢查頭等功能?
- 25. 爲什麼我的代碼沒有進入我的功能
- 26. 爲什麼我的功能沒有定義?
- 27. 爲什麼在我的React-app中沒有錄像功能?
- 28. arduino:爲什麼我的功能沒有運行
- 29. 爲什麼reduce合併器功能沒有執行?
- 30. 爲什麼我的肘部功能沒有定義?
爲什麼你需要它? 'memchr()'不能做'strnchr()'會做什麼? –
@JonathanLeffler推測「strnchr()」會在終止符被擊中後停止*或者*最大長度被擊中。 'strchr_s'可能是一個更好的名字。但是,當然如果你的數據集中有溢出的字符串,那麼你已經輸了。 – Sneftel
@Sneftel:嗯......有趣......如果你不知道空終止字符串是多長時間,但知道它不長於N個字節,而且你只對搜索最多M個字節感興趣,並且M