2013-03-30 32 views
5

Tôi đã sau xác định trong mã của tôiTôi làm cách nào để xác định chuỗi ký tự chưa ký *?

#define PRODUCTNAME  "SomeName" 

và tôi muốn gửi nó với một hàm com_reply(unsigned char* msg, uint16_t lenght).

Bây giờ, tôi nhận được cảnh báo rằng đối số của tôi khác nhau về sự ký kết. Tôi biết vấn đề là gì và cũng tại sao com_reply sử dụng unsigned char* thay vì char*, tôi chỉ muốn biết:

Làm thế nào tôi có thể xác định chuỗi của tôi như là một unsigned char* vì vậy tôi có thể sử dụng nó trong suốt chương trình của tôi mà không nhận được cảnh báo ở khắp mọi nơi .

EDIT:

Nói đúng ra tôi có nhiều hơn một định nghĩa ở đây và lý do chính là có một BANNER xác định trong đó bao gồm nhiều định nghĩa khác, như thế này:

#define PRODUCTNAME  "SomeName" 
#define PRODUCTDATE  "2013-03-30" 
#define BANNER   PRODUCTNAME " (" PRODUCTDATE ")" 

Tôi có nên tạo const biến và nối chúng vào lúc bắt đầu chương trình thay vì sử dụng định nghĩa ở đây?

+1

Tại sao không 'const char * PRODUCTNAME = "somename" 'hoặc tương tự? (không liên quan, nhưng #define có nhiều bất lợi cho điều này.) –

+1

Tôi không biết mức độ tuân thủ tiêu chuẩn này như thế nào, nhưng còn về: '(const unsigned char *)" SomeName "' – Mysticial

+2

Hết sức tò mò, cái gì là 'com_reply' chức năng làm gì? Nó có vẻ giống như một cái gì đó không thực sự lấy một chuỗi, mà là một con trỏ tới một số từ 0 đến 255. – austin

Trả lời

10

này nên làm việc:

#define PRODUCTNAME  ((const unsigned char *)"SomeName") 
+4

Không bao giờ gán (hoặc truyền bất kỳ) chuỗi ký tự nào cho các con trỏ không const –

+0

cảm ơn, được ghi chú hợp lệ, vì vậy điều này có đúng không? – thumbmunkeys

+2

Non-const là chính xác, vì chuỗi ký tự không phải là 'const'. Nhưng nó ngụ ý bạn có thể sửa đổi nó, mà bạn không thể. – teppic