回答
如果您知道strncpy()
的限制,那麼它是可以的。我不去,因爲我不喜歡它的侷限性,這有兩方面:
- 它並不能保證空終止
- 它總是寫入到目標緩衝區
這的每個字節也就是說,如果你寫:
char little[10];
char large[20480];
strncpy(little, sizeof(little), "abcdefghijklmnopqrstuvwxyz");
strncpy(large, sizeof(large), "abcdefghijklmnopqrstuvwxyz");
然後little
不是一個空結束的字符串,雖然沒有發生緩衝區溢出,並有較大的空20454複製它的T結束了。兩者都很麻煩。
- 請考慮
strlcpy()
和strlcat()
是否適用於iOS;它們在Mac OS X上。
如果您使用C++進行編碼,則根本不應使用C字符串,或者僅在系統服務需要使用的最有限情況下使用C字符串,然後您應該有一個使用C++字符串並將somestring.c_str()
值傳遞給系統服務的封面函數(內聯)。
如果你在Objective-C中編碼,你將使用NS *字符串。
所以,如果你用C編碼,只考慮strncpy()
。即使如此,也要謹慎對待。
我有一個論點(我不生任何要求的新穎性在它—我收集別人的想法):
- 您只能使用功能,如
strcpy()
,strncpy()
,strcat()
和strncat()
安全如果你知道字符串的長度,目標緩衝區和源字符串(你知道你快速調用的功能的弱點,那麼傳遞給strncat()
的長度代表什麼?(1))。 - 如果你知道一切都是多久,你不需要使用像
strcpy()
這樣的函數;您可以使用memmove()
(或memcpy()
)。 - 所以字符串複製和移動功能應該是不相關的;你不需要它們在安全的代碼中,因爲你知道一切都是多久,因此可以使用內存例程。
(1)長度在當前字符串是佔後目標緩衝器中的可用空間。因此,要使用strncat()
,您必須知道目標字符串中字符串的長度和可用的總長度,以便您可以跳過字符串的初始段,然後連接部分或全部第二串。但是,如果你知道,你也可以使用:
strncpy(target + curr_target_strlen, source, target_size - curr_target_strlen);
這將是「更有效」,因爲它不涉及跳過字符串(順便說一下,可能會導致二次行爲的主導作用如果您正在構建一個長字符串,並且有大量的strncat()
或strcat()
操作)。或者,因爲你知道所有的尺寸,你可以使用memmove()
:
size_t copy_length = target_size - curr_target_strlen;
if (copy_length > source_strlen)
copy_length = source_strlen + 1;
memmove(target + curr_target_strlen, source, copy_length);
而且,除非我有一個差一錯誤的寫在一時衝動的代碼,避免大部分的與strncat()
的問題。如果您始終使用strncat()
,並且第一個參數指向字符串末尾的空值,則它有其用處(並且可能會在彙編程序中進行優化。否則,它不是一個好的選擇IMNSHO。
指定您的安全意味着什麼,無論如何iPhone上的strncpy
與其他平臺上的安全一樣。
由於您需要strncpy
我想你沒有使用NSString
s,所以我沒有看到使用它的任何問題。
- 1. 是否打開()。read()安全?
- 2. 此功能對於併發執行是否安全?
- 3. 對象成員對於Callable&ExecutorService是否是線程安全的
- 4. HTTPS - iPhone到API - URL是否安全?
- 5. 公開顯示phpinfo()是否安全?
- 6. 公開AWS Cognito ID是否安全?
- 7. .json API是否需要安全(https)才能用於iOS應用程序開發?
- 8. 時將是安全開發CSS3
- 9. 對於iphone開發,如何翻轉UIImageView?
- 10. 代碼合同是否用於安全?
- 11. 這些數據是否安全發送?
- 12. idToken是否安全地通過API的非安全URL發送?
- 13. ConcurrentHashMap是否完全安全?
- 14. session_set_cookie_params是否安全?
- 15. Titanium.App.Properties是否安全
- 16. AfxBeginThread是否安全?
- 17. Locale.setDefault()是否安全?
- 18. const_cast是否安全?
- 19. Redux是否安全?
- 20. signed_request是否安全?
- 21. Context.MODE_PRIVATE是否安全?
- 22. 重用javax.xml.ws.Service對象是否安全?
- 23. 線程安全對象 - 是否靜態?
- 24. 對於通常依賴htaccess的webapps,NGINX是否安全?
- 25. 這個cookie系統對於存儲密碼是否安全?
- 26. jquery的load()對於刷新搜索結果是否安全?
- 27. 使用volatile來發布不可變對象是否安全?
- 28. 檢查UI_USER_INTERFACE_IDIOM()以確定它是iPhone還是iPad是否安全?
- 29. Java BitSet對於併發只讀操作是安全的
- 30. 在您的個人iPhone上開發應用程序 - 安全嗎?
它會更多如果你指定了更多的上下文,那麼它會有幫助......你想拷貝什麼,爲什麼它需要安全,等等...... – Timmerz 2012-04-18 03:17:03