回答
如果您知道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. NS_ROOT_CLASS對於IOS開發是否「安全」?
- 2. 專爲iOS 6開發是否安全?
- 3. 使用ViewPager開發是否安全?
- 4. 是eZ組件安全用於開發?
- 5. 是否打開()。read()安全?
- 6. 此功能對於併發執行是否安全?
- 7. 在3.5開發機器上安裝.net 4.0 RC是否安全?
- 8. 對象成員對於Callable&ExecutorService是否是線程安全的
- 9. HTTPS - iPhone到API - URL是否安全?
- 10. iPhone開發 - 關於產品:自動釋放和是否我在做什麼是安全
- 11. 公開AWS Cognito ID是否安全?
- 12. 公開顯示phpinfo()是否安全?
- 13. 對於iphone開發,如何翻轉UIImageView?
- 14. 時將是安全開發CSS3
- 15. 在Django中開發一個小門戶是否安全
- 16. 開發者是否有責任保證安全?
- 17. 代碼合同是否用於安全?
- 18. 將SIGTERM發送到JVM是否安全
- 19. 這些數據是否安全發送?
- 20. idToken是否安全地通過API的非安全URL發送?
- 21. ConcurrentHashMap是否完全安全?
- 22. 數據庫觸發器對於交叉表完整性約束是否安全?
- 23. Context.MODE_PRIVATE是否安全?
- 24. const_cast是否安全?
- 25. BrowserID是否安全?
- 26. Locale.setDefault()是否安全?
- 27. Titanium.App.Properties是否安全
- 28. AfxBeginThread是否安全?
- 29. signed_request是否安全?
- 30. PhoneGap是否安全?
它會更多如果你指定了更多的上下文,那麼它會有幫助......你想拷貝什麼,爲什麼它需要安全,等等...... – Timmerz 2012-04-18 03:17:03