2011-06-28 25 views
1

數組訪問元素我有:如何從結構

struct strType{ 
    char *str1; 
    char buff[128]; 
    }; 

struct strType sType[3] = { 
          "String1", "", 
          "String2", "", 
          "string3" "" 
          }; 

我如何可以指定一個字符串愛好者? 我的要求是我需要兩個並行字符串,一個是預定義的,另一個是運行時間決定的。我正在考慮使用一系列結構。但無法使用它們。

回答

4

在陣列內訪問struct strType實例的buff部分是用sType[index].buff完成的。複製字符串可以用標準strcpy來完成:

strcpy(sType[0].buff, "String to put in buffer"); 

然而,它是更安全的數據複製到固定大小的緩衝區像這樣的時候(因爲如果你打開的可能性緩衝區溢出,有人崩潰使用strncpy或者把你的過程控制):

strncpy(sType[0].buff, "String to put in buffer", sizeof(sType[0].buff)); 
+3

請!儘可能使用strncopy(或其他「安全」變體)。 – jv42

+1

@ jv42:打我15秒:) – houbysoft

+0

@ jv42,@houbysoft:趕緊回答。現在修改:) – Jon

-2

需要初始化的結構是這樣的:

struct strType sType[3] = { {"String1", " "},{"String2", ""},{"string3", " "} }; 

然後你可以使用strcpy作爲喬恩提到,一旦你有你的字符串與你

+0

您實際上不需要在目標緩衝區中使用以空字符結尾的字符串來使用strcpy()。我不確定你的意思是「跟你串在一起」。 – Lundin

1

我假設你正在尋找首先初始化一個結構數組。在這種情況下,你的代碼應該是這樣的:

struct strType{ 
    char *str1; 
    char buff[128]; 
    }; 

struct strType sType[3] = { 
          { NULL, "String1" }, 
          { NULL, "String2" }, 
          { NULL, "string3" } 
          }; 

然後可以使用函數strncpyJon's answer將字符串複製到strType.buff。請注意,您必須先將內存分配給strType.str,然後才能將字符串複製到它。

+0

這很好,但他也在問以後如何分配給緩衝區。 – 2011-06-28 14:46:00

+0

爲什麼要用NULL初始化一個靜態分配的數組?這甚至編譯?你不是真的意思是{NULL,「String1」}嗎? – Lundin

+0

@Lundin:是的,我的意思是{NULL,「String1」}。感謝您指出了這一點。不,我沒有編譯,甚至沒有嘗試過,因爲它太簡單了。不應該急於回答。 –