मैं सी में नया हूं और मैं वर्तमान में संरचनाओं के साथ काम कर रहा हूं। मैं फंस गया हूं और अगर कोई मेरे बचाव में आया तो मैं बहुत आभारी रहूंगा। तो मेरे पास मुख्य मॉड्यूल से उप-मॉड्यूल में इनपुट डेटा लिखने के लिए एक फ़ंक्शन है। यदि यह सफलतापूर्वक लिखता है तो इसे 0 वापस करना चाहिए, और 1 यदि यह सफल नहीं होता है। मैं व्यापक रूप से पढ़ रहा हूं लेकिन मैं अभी भी अनिश्चित हूं कि memcpy का उपयोग करना है या नहीं। फिर, वापसी मूल्य पर मैंने पढ़ा है कि memcpy 0 देता है यदि ऑपरेशन सफल रहा और 1 यदि यह नहीं था। यहाँ मेरे कोड का वह हिस्सा है:

typedef struct {
    UINT32 carnum_n;
    UINT32 carnum_k;
    UINT32 results[30];
    UINT32 feedback[30];  
    UINT32 errors[30];
} MAIN;

typedef struct {
   UINT32 carnum_n;
   UINT32 carnum_k;
   UINT32 feedback[30];
} SETTING;

/* function to copy the data from the main to the sub-module */    
UINT32 Write( MAIN *data, SETTING *info)
{
   sc_memcpy ( &info->carnum_k, &data->carnum_k, sizeof (SETTING));
   sc_memcpy ( &info->feedback, &data->feedback, sizeof (SETTING));  //copies the array
}
  1. कृपया मुझे बताओ, क्या यह सही है? यदि नहीं, तो इसे लिखने का सही तरीका क्या है? या मेरे पास और क्या विकल्प हैं?
  2. जैसा कि मेरे पास एक सरणी भी है, मुझे इसके बारे में कैसे जाना चाहिए? जब मुझे मुख्य मॉड्यूल से उप-मॉड्यूल में fb [10] तक सहेजना होता है तो क्या परिवर्तन होता है?
  3. मैं वापसी की स्थिति को कैसे सम्मिलित करूं, यह देखते हुए कि मुझे मुख्य मॉड्यूल की तालिका से उप-मॉड्यूल की इनपुट तालिका में प्रत्येक प्रकार के डेटा की प्रतिलिपि बनाने के लिए कोड की एक पंक्ति लिखनी चाहिए?

मैं वास्तव में यह अधिकार प्राप्त करना चाहता हूं। अग्रिम में धन्यवाद :)

0
Hummingirl 16 अप्रैल 2020, 11:11

1 उत्तर

सबसे बढ़िया उत्तर

प्रश्न 1, आपका कोड सही नहीं है।

carnum_k कॉपी करते समय, sizeof(SETTING) गलत है। sizeof (SETTING) का अर्थ है SETTING संरचना में सभी डेटा का आकार। लेकिन आपको केवल carnum_k प्रतिलिपि की आवश्यकता है, इसलिए आपको carnum_k का आकार प्रदान करने की आवश्यकता है, जो कि sizeof (UINT32) है, UINT32, carnum_k का प्रकार है।

memcpy ( &info->carnum_k, &data->carnum_k, sizeof (UINT32));

आप केवल एक असाइनमेंट info->carnum_k = data->carnum_k भी लिख सकते हैं।

प्रतिक्रिया की प्रति में दो समस्याएँ हैं।

  1. sizeof (SETTING) गलत है जैसे आप carnum_k को कॉपी करते हैं। आप sizeof(UINT32 [30]) का उपयोग कर सकते हैं, UINT32 [30] feedback का प्रकार है।
  2. info->feedback एक सरणी पता है, इसलिए कोई ज़रूरत नहीं है &info->feedback, बस info->feedback
memcpy(info->feedback, data->feedback, sizeof(UINT32 [30]));

प्रश्न २. मेरे विचार से आपका मतलब है कि आप केवल feedback के भाग की प्रतिलिपि बनाना चाहते हैं।

जब आप मेमोरी कॉपी करते हैं तो आपको src मेमोरी एड्रेस, डेस्ट मेमोरी एड्रेस और मेमोरी के आकार को कॉपी करने की आवश्यकता होती है।

इसलिए यदि आप feedback[2] से feedback[10] में कॉपी करना चाहते हैं।

  • स्रोत का पता &(data->feedback[2]) है
  • गंतव्य पता &(info->feedback[2]) है।
  • २ से १० तक, ९ मान हैं जिन्हें आप कॉपी करना चाहते हैं, इसलिए कुल आकार 9 * sizeof(UINT32) है
memcpy(&(info->feedback[2]), &(data->feedback[2]), 9*sizeof(UINT32));

प्रश्न 3।

मुझे जवाब नहीं पता।

0
randomeval 16 अप्रैल 2020, 09:04