सी: संरचना में एक स्ट्रिंग को कैसे स्टोर करें

तो मेरे पास एक संरचना है, और इसके सदस्यों में से एक एक स्ट्रिंग है।

struct Output {
     char *axis;
     int value;
};
struct Output Jsoutput;

मेरा सवाल है, मैं धुरी में एक स्ट्रिंग कैसे स्टोर करूं?

char whichaxis[4][3] = {"LX","LY","RY","RX"};
// Store which  axis and value of the joystick position in Jsoutput
Jsoutput.axis =  whichaxis[jse.number];
printf("%s\n",Jsoutput.axis);

I feel like there should be some & somewhere, but not sure where.

0
यह एक इवेंट प्रोसेसिंग चीज है, इसलिए jsoutput.axis whoaxis से वर्णों की एक नई जोड़ी के साथ नियमित रूप से अधिलेखित किया जाएगा। जोएक्सिस नहीं बदलेगा, और स्थापित रहना चाहिए।
जोड़ा लेखक theoB610, स्रोत
ओह ठीक है, क्षमा करें गलत समझा। मेरे मुख्य पाश सामान में होता है यदि Jsoutput.axis == "LX"
जोड़ा लेखक theoB610, स्रोत
जोक्सिस का जीवनकाल क्या है? क्या यह वास्तव में इस तरह के ढेर पर है? क्या आप axis पर स्ट्रिंग पर लिखने की योजना बना रहे हैं?
जोड़ा लेखक Kevin, स्रोत
तो आपको axis को फिर से सौंपना होगा, लेकिन कभी भी लिखना नहीं होगा, उदा। <�कोड> Jsoutput.axis [1] = 'x' ?
जोड़ा लेखक Kevin, स्रोत

3 उत्तर

आपको स्ट्रिंग को दूसरी बार "स्टोर" करने की ज़रूरत नहीं है।

char whichaxis[4][3] = {"LX","LY","RY","RX"};

स्ट्रिंग स्टोर करता है।

char *axis;

कहते हैं, "मैं एक स्ट्रिंग पर इंगित करने जा रहा हूं"।

If you wanted a & in there, you could do:

Jsoutput.axis =  & (whichaxis[jse.number][0]) ;

लेकिन सी के मूल डिजाइनर बहुत व्यावहारिक थे और सुविधा के लिए हर समय एरे पॉइंटर्स में बदल देते हैं। अधिक जानकारी के लिए सरणी क्षय क्या है देखें।

0
जोड़ा
मैं कह रहा हूं कि मुझे लगता है कि वहां होना चाहिए और ऐसा ही था जो मैंने सोचा था कि समाधान होगा।
जोड़ा लेखक theoB610, स्रोत

You can copy a String with the function strcpy(destination, source)from string.h

see http://www.cplusplus.com/reference/cstring/strcpy/

Jsoutput.axis =  malloc(3);
strcpy(Jsoutput.axis,whichaxis[jse.number]);
0
जोड़ा
@ केविन क्या मतलब है "मॉलोक का परिणाम डालना"?
जोड़ा लेखक theoB610, स्रोत
ठीक है, तो बेहतर काम करना है?
जोड़ा लेखक theoB610, स्रोत
और उन सभी को लिखें जो जानते हैं कि, क्या लिखने के लिए कोई स्मृति नहीं है।
जोड़ा लेखक Kevin, स्रोत
बेहतर है, लेकिन आपको '\ 0' के लिए एक अतिरिक्त बाइट चाहिए, और आपको malloc का परिणाम नहीं डालना चाहिए।
जोड़ा लेखक Kevin, स्रोत
@ theoB610 उचित उत्तर इस बात पर निर्भर करता है कि आप thataxis और axis के साथ क्या करना चाहते हैं। प्रश्न पर मेरी टिप्पणी देखें।
जोड़ा लेखक Kevin, स्रोत
आपको सी में डालना नहीं चाहिए । सी ++ में आपको नया इसके बजाय उपयोग करना चाहिए (हालांकि यदि आप मॉलोक का उपयोग करते हैं तो आपको कास्ट करना होगा)। (सीसी @ थियो बी 610)
जोड़ा लेखक Kevin, स्रोत
जोड़ा लेखक Florian Groetzner, स्रोत
उसका मतलब है (char *) एक कास्ट है
जोड़ा लेखक Florian Groetzner, स्रोत
मुझे नहीं पता क्योंकि प्रतिबिंब में वे एक कास्ट भी इस्तेमाल करते हैं
जोड़ा लेखक Florian Groetzner, स्रोत

बस strdup का उपयोग करें

Jsoutput.axis =  strdup(whichaxis[jse.number]);
0
जोड़ा
क्या यह मॉलोक की आवश्यकता को अस्वीकार करता है?
जोड़ा लेखक theoB610, स्रोत
हाँ strdup एक malloc करता है।
जोड़ा लेखक woolstar, स्रोत