5

Tôi đang sử dụng VS2013. Toàn bộ chương trình là C, không phải C++.Sử dụng bộ khởi tạo được chỉ định để khởi tạo bộ khởi tạo mảng char 2D trong cấu trúc phát ra lỗi C2078 trong VS2013

tôi có thể khởi tạo một "mảng của chuỗi" như thế này mà không cần bất kỳ vấn đề:

char titles[4][80] = { "Dad", "Idiot", "Donut Lover", "Fewl" }; // OK! 

Tôi đã một struct tuyên bố như thế này:

typedef struct 
{ 
    char name[80]; 
    char titles[4][80]; 
} Dude; 

Khi tôi cố gắng để khởi tạo struct như thế này :

Dude homer = 
{ 
    .name = "Homer", 
    .titles = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
}; 

Tôi nhận được "lỗi C2078: quá nhiều trình khởi tạo". Điều này là do khởi tạo mảng- Nếu tôi loại bỏ dòng .titles = { ..., lỗi sẽ biến mất. Tại sao tôi nhận được lỗi này? Có cách nào khác để thực hiện kiểu khởi tạo chuỗi này trong một khởi tạo cấu trúc?

Nếu tôi thay đổi tuyên bố của struct để trông giống như này

typedef struct 
{ 
    char name[80]; 
    char *titles[4]; 
} Dude; 

lỗi sẽ biến mất. Tuy nhiên, đây không phải là một sự thay đổi mà tôi có thể thực hiện. Các phần khác của cơ sở mã yêu cầu kích thước của cấu trúc này chính xác là 400 byte.

Hơn nữa, tôi hoàn toàn biết rằng tôi có thể sử dụng strcpy để điền vào từng trường, nhưng điều đó không trả lời được câu hỏi của tôi.

+2

thử 'Dude homer = { "Homer" , {"Dad", "Idiot", "Donut Lover", "Fewl"} }; ' – BLUEPIXY

+2

AFAIK, VS2013 sử dụng C89 và C89 không hỗ trợ sử dụng '{.item =…}'. (Không phải là một cái tên nào đó sao?). GCC đưa ra 'cảnh báo: ISO C90 cấm xác định subobject để khởi tạo [-Wpedantic]' cho thấy rằng nó không được hỗ trợ trong C89. –

+0

Tôi sử dụng codeblocks để biên dịch và nó là ok. Tôi đoán nó là vấn đề VS .. Tôi cập nhật câu hỏi của bạn để bao gồm các thẻ 'VS' và' VS2013' – Ian

Trả lời

0

Trong C, nó dễ dàng hơn để làm điều này:

Dude homer = 
{ 
    "Homer", 
    { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
}; 

Không biết nếu làm việc này, nhưng bạn có thể thử:

Dude homer = 
{ 
    .name = "Homer", 
    .titles[] = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
}; 
Các vấn đề liên quan