所以,我在 c 中有这段代码,它应该从一个 ascii 文件中读取,然后返回一个被解析并编译成字节码的字符串。当我尝试使用 ftell 获取文件的大小时,它返回 33 而不是 29(文件包含新行的字节数)。
文件:
push #25
nop
push #44
add
hlt
编码:
uint8_t* read_ascii_file(uint8_t* path) {
FILE* file = fopen(path, "r");
if (file == NULL)
return NULL;
fseek(file, 0, SEEK_END);
uint32_t size = ftell(file);
fseek(file, 0, SEEK_SET);
uint8_t* buffer = (uint8_t*)malloc(sizeof(uint8_t) * size);
if (buffer == NULL)
return NULL;
fread(buffer, sizeof(uint8_t), size, file);
buffer[size] = '\0';
fclose(file);
return buffer;
}
似乎无缘无故地又添加了四个字节。我的解析器抱怨“hlt====”不是一个有效的指令(“====”是 4 个额外的字节)。
Ftell 或 fseek 在这种情况下搞砸了,我不知道这是否是错误
我在 Windows 上,我也在使用 Visual Studio