char
ürününü Token
s dosyasına dönüştürmek için basit bir C programı yazdım. İşler iyi çalışıyor ama neden size
değişken değerinin değiştiğini anlayamıyorum. code
"abcde"
içerenC değişkeni için ifade edilemeyen bir değişiklik var
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;
}
eğer çıkışı: Farklı pistlerinde
BEFORE PARSE: 5
AFTER PARSE: 142786584
ikinci printf
görüntüler farklı değerler.
Lütfen yardım edin!
PS: Ben bir C noob'um!
DÜZENLEME:
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;
}
Sen malloc simge gerekir. –