2011-08-28 105 views
0

我想構造一個具有未知數量的行2列 像C「通用」結構打造

struct s 
{ 
    cinst char*** s; 
} 
const char* str1[][2] = {"1","2", 
         "3","4", 
         "5","6"}; 
s s1 = {str1}; 
const char* str2[][2] = {"1","2", 
         "3","4"}; 

s s2 = {str2}; 

中的代碼compilation.How失敗陣列的結構,我可以解決這個問題?

+1

當您的數組是二維數組的字符串時,初始化列表的RHS是一維的。 – John

回答

2

除了屬於同一類型

您的問題是,str1的類型和結構體成員s不兼容

  • str1是類型const char*[][2]
  • 該結構構件的類型爲const char***
  • 01的

強制編譯器採用str1的類型是const char ***解決您的眼前問題,即程序編譯和「作品」,但你真的需要理解數組不是指針指針不是數組 。請參閱c-faq site的第6部分。

struct s 
{ 
    const char*** s; 
}; 
const char* str1[][2] = {"1","2", 
         "3","4", 
         "5","6"}; 
struct s s1 = {(const char ***)str1}; 
const char* str2[][2] = {"1","2", 
         "3","4"}; 

struct s s2 = {(const char ***)str2}; 
+2

這是C.結構類型名稱不會自動typedefed! – celavek

+0

謝謝@celavek:你說得對。郵政忍者編輯,以反映這一點。 – pmg

+0

Whynot只是一個typedef?此外,爲什麼當初始化器仍然在1維(2個元素字符)時有三個間接關係? – John

0

嗯,這是不是C.(並有一個分號失蹤)

的struct {...};不引入「s」類型,它是而不是的一個typedef。 例如,你不能使用: struct s {...}; s my_thing; (即使你添加缺少的分號) 也許你在混淆C和C++?

-2
struct s 
{ 
    cinst char** s; 
}; 
const char str1[][2] = {"1","2", 
       "3","4", 
       "5","6"}; 
s s1 = {str1}; 
const char str2[][2] = {"1","2", 
       "3","4"}; 

s s2 = {str2}; 

刪除第三個間接/解除引用將解決此問題。

從錯字 cinst和失蹤分號和假設(沒有讓我們知道) sstruct s
+0

-1用於提供不編譯的代碼;更糟的是,它不尊重有關語言的基本語法。你用什麼語言呈現你的程序? – celavek

+0

需要我幾分鐘的時間才能將其傳遞到我的編譯器中,因爲發佈的代碼需要將標題與主體分離。它解決了OP的語法缺陷。 – John

+0

對不起,你的回答沒有解決任何OP的問題。這顯然是錯誤的。老實說,這個藉口很蹩腳。 – celavek