gcc 这是否可能是愚者问题/错误

9udxz4iz  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(136)

当我在解决今天的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

k4ymrczo

k4ymrczo1#

行上的代码中可能有错误

int num = 10 * (line[18 + (i << 2)]-'0') + (line[19 + (1 << 2)]-'0');

正在读取的第二个字符的索引似乎不正确。应该使用line[19 + (i << 2)]而不是line[19 + (1 << 2)]来访问字符串中的正确字符。

相关问题