में अनपेक्षित परिवर्तन मैंने char
को Token
में परिवर्तित करने के लिए एक सरल सी प्रोग्राम लिखा है। चीजें ठीक काम करती हैं लेकिन मुझे समझ में नहीं आता कि size
परिवर्तनीय मान क्यों बदल रहा है।सी परिवर्तनीय
typedef struct _token {
int val;
} Token;
void parse(char* code, int size, Token** tokens) {
int i = 0;
for (; i < size; i++) {
tokens[i] = malloc(sizeof(Token));
tokens[i]->val = code[i];
}
}
int execute(char *path) {
char* code;
if (read_file(path, &code) != 0) {
return -1;
}
int size = strlen(code) - 1;
printf("BEFORE PARSE: %d\n", size); // 1st printf
Token *tokens;
parse(code, size, &tokens);
printf("AFTER PARSE: %d\n", size); // 2nd printf
return 0;
}
अगर code
"abcde"
होता है, उत्पादन होता है: विभिन्न रन पर
BEFORE PARSE: 5
AFTER PARSE: 142786584
दूसरा printf
प्रदर्शित करता है विभिन्न मूल्यों।
कृपया मदद करें!
पीएस: मैं एक सी नोब हूँ!
संपादित करें:
int read_file(char* path, char** code) {
FILE* fp = fopen (path , "rb");
if(!fp) {
return -1;
}
fseek(fp , 0L , SEEK_END);
long lSize = ftell(fp);
rewind(fp);
/* allocate memory for entire content */
*code = calloc(1, lSize+1);
if(!*code) {
fclose(fp);
return -1;
}
/* copy the file into the buffer */
if(1 != fread(*code , lSize, 1 , fp)) {
fclose(fp);
return -1;
}
fclose(fp);
return 0;
}
आप malloc टोकन की जरूरत है इससे पहले कि आप पार्स कहते हैं। –