[c 语言谜题 第二题] 程序改动,求输出数字

2018-09-27 18:33:33 +08:00
 shilyx

昨天出了一道题[c 语言谜题] 程序填空,老程序员来做做,不少朋友都搞定了,今天是第二题

#include <stdio.h>

struct FileData {
    FILE *fp;
    size_t size;
    unsigned char buf[1024];
};

main() {
    struct FileData fileData;
    unsigned char res = 0;
    size_t i;

    fileData.fp = fopen(__FILE__, "rb");
    fileData.size = fread(fileData.buf, 1, sizeof(fileData.buf), fileData.fp);

    for (i = 0; i < fileData.size; ++i) {
        if (fileData.buf[i] != ' ' && fileData.buf[i] != '\t' && fileData.buf[i] != '\r' && fileData.buf[i] != '\n') {
            res += fileData.buf[i];
        }
    }

    fclose(fileData.fp);
    printf("%u\n", (unsigned)res);
}

此程序是c 程序,文件扩展名“.c ”,意在将自身源代码中的所有“有效字符”相加后输出结果,虽然相加发生了溢出,但对于确定的输入,会有确定的输出。

此程序运行后输出的数字是220,可以先验证一下。

要求,替换掉源代码中的一个字符,条件如下:

问:经过了你的合法的替换,程序运行后的输出数字是几呢?

ps:角度比较刁钻,切勿因此虐心,仅供一乐,不承担法律责任

2858 次点击
所在节点    程序员
27 条回复
garzon
2018-09-27 21:49:24 +08:00
另:源程序在 msvc2017 不加#define _CRT_SECURE_NO_WARNINGS 是无法编译通过的,233
garzon
2018-09-27 21:53:30 +08:00
@casparchen 同理换成&-也行
garzon
2018-09-27 21:58:34 +08:00
试了下&&换&-,除了最后一个&&换成&-不行,其他都可以
garzon
2018-09-27 22:04:02 +08:00
@garzon 不对,傻了。换成&-程序意图改变了
hmzt
2018-09-28 10:41:46 +08:00
我有个更刁钻的角度,你这段代码好像没有\t
bfdh
2018-09-28 17:41:54 +08:00
没实测,貌似把下面这个数组任意改大小都行吧?
unsigned char buf[1024];
w01230
2018-10-12 08:35:02 +08:00
貌似在 for 这部分动比较容易一些。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493279

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX