तो मान लें कि मेरे पास कुछ इस तरह का कोड है।

#define DATA 0x67
char *mydata = malloc(1);
mydata = DATA

लाइन 3 निश्चित रूप से अमान्य है, लेकिन मैं जो देख रहा हूं वह 0x67 लेना है और इसे उस मेमोरी लोकेशन में पढ़ना है। यह स्पष्ट होना चाहिए, लेकिन मुझे नहीं पता कि प्रश्न को ठीक से पूछने के लिए इसे क्या कहा जाएगा।

0
Bogdan 10 अक्टूबर 2020, 00:40

3 जवाब

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

आपको पॉइंटर को 'डेरेफरेंस' करने की आवश्यकता है

#define DATA 0x67
char *mydata = malloc(1);
*mydata = DATA

इस पर इस तरीके से विचार करें।

char *mydata

कहता है कि *mydata एक चार है, आप डेटा को एक चार को असाइन कर सकते हैं

-1
pm100 10 अक्टूबर 2020, 00:43

डीरेफरेंस पॉइंटर एक ऐरे के पहले इंडेक्स (इस मामले में चार की एक एरे) तक पहुंचने के बराबर है, जो शायद अधिक आसानी से समझ में आता है:

#define DATA 0x67
char *mydata = malloc(1);
mydata[0] = DATA

यदि आपने अधिक मेमोरी आवंटित की होती तो आप इस मेमोरी के सभी बाइट्स को इस तरह एक्सेस कर सकते थे।

0
dspr 10 अक्टूबर 2020, 01:00

पोस्ट किया गया कोड मान्य नहीं है C.

संकलन का परिणाम:

#define DATA 0x67


char *mydata = malloc(1);
mydata[0] = DATA;     // note, the statement corrected

कंपाइलर को आउटपुट करने का कारण बनता है:

gcc -ggdb3 -Wall -Wextra -Wconversion -pedantic -std=gnu11 -c "untitled1.c" -o "untitled1.o" 

untitled1.c:6:24: warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration]
    6 |         char *mydata = malloc(1);
      |                        ^~~~~~

untitled1.c:6:24: warning: incompatible implicit declaration of built-in function ‘malloc’

untitled1.c:1:1: note: include ‘<stdlib.h>’ or provide a declaration of ‘malloc’
  +++ |+#include <stdlib.h>
    1 |

untitled1.c:6:24: error: initializer element is not constant
    6 |         char *mydata = malloc(1);
      |                        ^~~~~~

untitled1.c:7:9: warning: data definition has no type or storage class
    7 |         mydata[0] = DATA;
      |         ^~~~~~

untitled1.c:7:9: warning: type defaults to ‘int’ in declaration of ‘mydata’ [-Wimplicit-int]

untitled1.c:7:9: warning: ISO C forbids zero-size array ‘mydata’ [-Wpedantic]

untitled1.c:7:9: error: conflicting types for ‘mydata’

untitled1.c:6:15: note: previous definition of ‘mydata’ was here
    6 |         char *mydata = malloc(1);
      |               ^~~~~~

untitled1.c:3:18: error: invalid initializer
    3 |     #define DATA 0x67
      |                  ^~~~

untitled1.c:7:21: note: in expansion of macro ‘DATA’
    7 |         mydata[0] = DATA;
      |                     ^~~~

Compilation failed.

सुझाव देना:

#include <stdlib.h>

#define DATA 0x67

int main( void )
{
    char *mydata = malloc(1);
    mydata[0] = DATA;
}

जो सफाई से वांछित कार्यक्षमता को संकलित और निष्पादित करता है।

-1
user3629249 11 अक्टूबर 2020, 02:13