2011-03-17 53 views
6

Tôi đang cố gắng để làm một cái gì đó như thế này:Làm thế nào để gán mảng char trong struct inline?

struct SomeStruct { 
    const char *bytes; 
    const char *desc; 
}; 

SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" }; 

Tại sao không phải là làm việc này?

+0

Bạn gặp phải lỗi gì? Nếu bạn đang đăng câu hỏi về * nội dung nào đó không hoạt động * luôn đăng lỗi hoặc hành vi không chính xác bạn đang nhận được. –

Trả lời

8

Có thể vì { 0x10, 0x11, 0x12, 0x13 } là một mảng của char, không phải là con trỏ đến char.

Thay vào đó hãy thử SomeStruct example = { "\x10\x11\x12\x13", "10-13" };.

1

Vì cú pháp { ... } chỉ phù hợp để gán mảng, trong khi const char* là một con trỏ chứ không phải mảng.

Nếu bạn khai báo bytes làm mảng thay thế - char bytes[4]; - nhiệm vụ sẽ hoạt động.

+0

Nhưng có cách nào để làm một việc như thế không? Giống như, tôi có thể khai báo một mảng như thế (char blah [] = {0x1, 0x2,0x3};) –

1

Vì trình biên dịch không thể chuyển đổi {1, 2, 3, 4} thành con trỏ thành byte (nó có thể chuyển đổi "10-13" thành con trỏ thành char).

Bạn có thể chỉ định các byte ở định dạng 'chuỗi' (nếu bạn không nhớ một 0x00 phụ trong bộ nhớ được trỏ đến bởi bytes):

SomeStruct example = {"\x10\x11\x12\x13", "10-13"}; 
1

Như những người khác đã nói, chuỗi khởi tạo của bạn có giá trị cho một mảng và cấu trúc chứa một con trỏ. Bạn có thể sử dụng câu trả lời của một số chuỗi, nhưng IMHO, không phải là dễ đọc nhất (và nó sẽ không hoạt động nếu bạn quyết định để thay thế các hằng số rõ ràng với hằng số biểu hiện). Các giải pháp tổng quát hơn là xác định một, tên mảng riêng biệt, và sử dụng nó:

char const structBytes10to13[] = { 0x10, 0x11, 0x12, 0x13 }; 
SomeStruct example = { structBytes10to13, "10-13" }; 

này sẽ làm việc cho các biểu thức khởi tạo tùy ý trong mảng nhân vật.

Các vấn đề liên quan