Ho scritto un semplice programma C per convertire char
in Token
s. Le cose funzionano bene ma non riesco a capire perché il valore della variabile size
sta cambiando.Variabile inspiegabile nella variabile C
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;
}
se code
contiene "abcde"
, il risultato è:
BEFORE PARSE: 5
AFTER PARSE: 142786584
Il secondo printf
mostra valori diversi in diverse esecuzioni.
Si prega di aiuto!
PS: Sono un Noob!
EDIT:
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;
}
devi gettoni malloc prima di chiamare parse. –