昨天出了一道题[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,可以先验证一下。
要求,替换掉源代码中的一个字符,条件如下:
- 1、替换一个字符即去掉一个字符,再在相同位置添加一个字符。替换掉的字符和添加的字符不能相同
- 2、仅限一个字符,字符大小一个字节
- 3、程序可以编译运行(忽略编译和链接的警告),无运行时异常或崩溃
- 4、被替换掉的字符不可以是数字
- 5、被替换掉的字符不可以是引号内的(单引号或双引号)
- 6、被替换掉的字符和添加的字符都必须是可打印字符、可见、不是空白字符、换行符等
- 7、不影响程序意图(累加“有效字符”输出数字结果)
- 8、同时兼容 gcc 和 vs ( 2008 以上即可)
问:经过了你的合法的替换,程序运行后的输出数字是几呢?
ps:角度比较刁钻,切勿因此虐心,仅供一乐,不承担法律责任