当我在解决今天的AOC挑战时,我偶然发现了一个有趣的现象,它似乎是愚者编译器有问题,或者我做了一些我还没有意识到的不正确的事情。
在下面的代码中,我解析从文件input.txt中读取的一行中的数字偏移量列表:
Starting items: 83, 62, 93
在num变量中存储结果时出现了一些问题。我还没有检查反汇编,看看发生了什么。
#include "stdio.h"
#include "stdlib.h"
#include "../../includes/fmt.c"
void problem();
int main() {
FILE * fp = fopen("input.txt", "r");
char * line = NULL;
size_t len = 0;
size_t length = (getline(&line, &len, fp) - 16) >> 2;
problem(line, length);
}
void problem(char * line, size_t length) {
for (size_t i = 0; i < length; ++i) {
int num = 10 * (line[18 + (i << 2)]-'0')
+ (line[19 + (1 << 2)]-'0');
println("{2i: = }", num, 10 * (line[18 + (i << 2)]-'0')
+ (line[19 + (i << 2)]-'0'));
}
}
输出量:
82 = 83
62 = 62
92 = 93
我知道错误不在我的自定义打印功能中,因为我尝试过不使用它。
所以我的问题是,这是我自己的错还是愚者的错误?
Linux操作系统5.15.82-1-lts x86_64愚者12.2.0
1条答案
按热度按时间k4ymrczo1#
行上的代码中可能有错误
正在读取的第二个字符的索引似乎不正确。应该使用
line[19 + (i << 2)]
而不是line[19 + (1 << 2)]
来访问字符串中的正确字符。