2013-03-30 14 views
5

मैं अपने कोडमैं # हस्ताक्षरित char * स्ट्रिंग कैसे परिभाषित करूं?

#define PRODUCTNAME  "SomeName" 

में परिभाषित निम्नलिखित है और मैं एक समारोह com_reply(unsigned char* msg, uint16_t lenght) के साथ भेजना चाहते हैं।

अब मुझे चेतावनी है कि मेरा तर्क हस्ताक्षर में भिन्न है। मैं जानता हूँ कि समस्या क्या है और यह भी कारण है कि com_replyunsigned char* बजाय char* का उपयोग करता है, मैं सिर्फ जानना चाहता हूँ:

मैं कैसे परिभाषित कर सकते हैं एक unsigned char* के रूप में मेरे स्ट्रिंग तो मैं हर जगह की चेतावनी मिल के बिना मेरे कार्यक्रम के दौरान उपयोग कर सकते हैं ।

संपादित करें:

सच पूछिये तो मैं यहाँ परिभाषित करता है और अधिक से अधिक और मुख्य कारण है कि वहाँ एक BANNER परिभाषित कई अन्य परिभाषित करता है के होते हैं जो इस तरह, है:

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

मैं बनाना चाहिए कॉन्स वैरिएबल्स और उन्हें परिभाषित करने के बजाय कार्यक्रम शुरू करने पर उन्हें संयोजित करें?

+1

क्यों नहीं 'स्थिरांक चार * PRODUCTNAME =" SomeName "' या इसी तरह की? (असंबंधित, लेकिन #define के लिए इसके बहुत सारे नुकसान हैं।) –

+1

मुझे पता नहीं है कि यह मानक-अनुपालन कितना है, लेकिन इसके बारे में क्या है: '(कॉन्स्टेंट न किए गए चार *) "कुछ नाम" ' – Mysticial

+2

जिज्ञासा से,' com_reply' समारोह करो? ऐसा लगता है कि यह ऐसा कुछ है जो वास्तव में एक स्ट्रिंग नहीं लेना चाहिए, बल्कि 0 और 255 के बीच की संख्या के लिए एक सूचक होना चाहिए। – austin

उत्तर

10

यह काम करना चाहिए:

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

गैर-कॉन्स्ट पॉइंटर्स –

+0

को स्ट्रिंग अक्षर का कभी भी असाइन करें (या कास्ट करें) धन्यवाद, विधिवत नोट किया गया है, तो क्या यह सही होगा? – thumbmunkeys

+2

गैर-कॉन्स सही है, क्योंकि एक स्ट्रिंग शाब्दिक 'const' नहीं है। लेकिन इसका तात्पर्य है कि आप इसे संशोधित कर सकते हैं, जिसे आप नहीं कर सकते। – teppic

संबंधित मुद्दे