2011-11-21 64 views
2

在C中複製字符串時,我需要注意哪些因素?什麼可能會出錯?複製字符串時需要注意些什麼?

我能想到在複製一個字符串之前我需要保留足夠的內存,並且必須確保我有足夠的權限來寫入內存(儘量避免常規保護錯誤),但是還有什麼我必須支付注意什麼時候複製字符串?是否還有其他潛在的錯誤?

+0

它實際上是我作業中複製字符串的一部分,而不使用string.h提供的函數,是的。由於我對memcpy(或通常爲C)等函數的使用經驗非常有限,因此我想確保自定義的「strcpy」能夠很好地工作,並且在複製字符串時注意所有可能出錯的地方。 – beta

回答

3
  • 請確保您在目的地有足夠的緩衝空間(即知道您將複製多少字節)。這也意味着確保源字符串被正確終止(由空字符,即0 = '\0')。
  • 確保目標字符串得到正確終止。
  • 如果您的應用程序能夠識別字符集,請記住,某些字符集可以包含空字符,而其中一些字符集可以包含可變長度字符。
+0

非常感謝您回答我的問題。既然這是我想知道的,我將在大約10分鐘內將您的答案標記爲解決方案。 – beta

1

您必須注意C中字符串的定義:它們是以空終止字符('\ 0')結尾的字符序列。

string.h中的所有函數都可以用這個假設。與這些功能一起工作,你應該沒問題。

+0

不幸的是我不允許使用string.h提供的任何函數,所以現在我必須使用memcpy。 – beta

+0

所以這是一項功課。 – ivarec

2

C字符串通常是由零字節結尾的非零字節的數組。處理它們的例程得到一個指向一個字節的指針(也就是說,它指向從該字節開始的數組)。你應該注意保留的地方適合。瞭解有關strcpystrcat及其有界配件strncpystrncat。也關於strdup。並且不要忘記清除終止字節爲零(特別是當達到與strncpy等的邊界時)。某些庫(例如GTK的Glib)提供了很好的實用功能(例如g_strdup_printf)構建字符串。

閱讀我提到的所有功能的文檔。

2

您需要:

  1. 分配的目的地足夠的內存(strlen的(源)+ 1)

  2. 確保源不爲NULL

  3. 處理Unicode的問題(串長度可能小於 字節的長度)

相關問題