2013-05-13 73 views
-1

我理解它是如何工作出了問題:結構字符數組使用

struct main_s { 
    char test[1]; 
}; 

它是一個二維陣列測試[1] [X]? 例如如何將字符串「Hello World」傳遞給結構體的字段?

char array [1] [11] = {{「H」,「e」,「l」,「l」,「o」,「」,「W」,「o」,「r」, 「l」,「d」}};

和main_s-> test = array不起作用,編譯器給出關於類型的錯誤,1是char []和另一個char *。

+0

你不清楚你在問什麼,但這看起來像我們的老朋友_struct hack_(http://stackoverflow.com/questions/3711233/is-the-struct-hack-technically-未定義行爲)。參考文獻是否回答您的問題? – 2013-05-14 06:01:51

+0

「是2維陣列測試[1] [x]?」什麼?!你在哪裏看到這兩個維度? – 2013-05-14 08:15:41

回答

1

如何將字符串「Hello World」傳遞給結構體的字段?

您首先需要爲test聲明足夠的內存空間以包含所需的字符串。 "Hello World"包含11個charachters。所以您的陣列應該至少包含12個元素

struct main_s { 
    char test[12]; 
}; 

,然後你的字符串複製到陣列:

struct main_s m; 
strcpy(m.test, "Hello World"); 
printf("%s\n", m.test) // this display the content of your char array as string 

如果要聲明一個二維數組:

struct main_s { 
    char test[3][13]; 
} 

struct main_s m; 
strcpy(m.test[0], "Hello World0"); 
strcpy(m.test[1], "Hello World1"); 
strcpy(m.test[2], "Hello World2"); 
printf("%s\n%s\n%s\n", m.test[0], m.test[1], m.test[2]); 

strcpy(m.test[1], "Hello World1"); 

等同於NT才能:

m.test[1][0]='H'; 
m.test[1][1]='e'; 
m.test[1][2]='l'; 
. 
. 
m.test[1][10]='d'; 
m.test[1][11]='1'; 
m.test[1][12]='\0'; //add null charachter at the end. it's mandatory for strings 

上述代碼不允許

m.test[1] = "Hello World1"; 
m.test[1] = {'H','e','l','l','o',' ','W','o','r','l','d','1'}; 
0

不能字符串"Hello world"傳遞給該陣列。它是一個單一的字符變量。

char test[1];char test;相似。

更改如下來保存地址的結構,

結構main_s { 字符*試驗; };

現在下面的代碼將工作。

char array[1][11] = { {"H","e","l","l","o"," ","W","o","r","l","d"} }; 

struct main_s var; 
var->test = array; 
0

您的char數組是一個大小爲1的數組,因此您只能在其中填充一個字符。如果你想通過你好世界這個結構,它會是這樣的:

struct main_s{ 
    char * test; 

}; 

int main(){ 
    struct main_s a; 
    a.test = malloc(sizeof(n)) //Where n is the size you want so how ever many chars hello world is followed by null 
    memcpy(a, "Hello World\0") 
    } 

這基本上是如何工作的。您需要將Hello World \ 0複製到分配給hte指針的內存中。