【发布时间】:2018-05-23 18:45:32
【问题描述】:
我的教授指定将file_1.txt 一次读取100 字节到char array。我生成了以下 sn-p 代码:
int key;
key = atoi(argv[1]);
FILE *file_pointer;
file_pointer = fopen(argv[2], "rb");
char buffer[100];
char output[sizeof(int)][100];
int output_counter = 0;
int read_counter;
int read_elements;
while(read_elements = fread(buffer, 1, 100, file_pointer) > 0)
{
read_counter = 0;
while(read_counter < 100)
{
printf("xor'ing %d and %d\n", key, buffer[read_counter]);
output[output_counter][read_counter] = buffer[read_counter] ^ key;
read_counter = read_counter + 1;
}
output_counter = output_counter + 1;
}
fclose(file_pointer);
file_1.txt 读取:“项目的测试文件\n”。我用gccencrypt.c
然后:
./a.out 111 file_1.txt file_2.txt
然后: ./a.out 111 文件_2.txt 文件_3.txt
cat file_3.txt reads:
项目的测试文件:
v▒▒▒s▒▒@////////▒
在第一次使用file_1.txt 和file_2.txt 运行程序时,会打印嵌套的while 循环中的print 语句:
xor'ing 111 and 116
xor'ing 111 and 101
xor'ing 111 and 115
xor'ing 111 and 116
xor'ing 111 and 32
xor'ing 111 and 102
xor'ing 111 and 105
xor'ing 111 and 108
xor'ing 111 and 101
xor'ing 111 and 32
xor'ing 111 and 102
xor'ing 111 and 111
xor'ing 111 and 114
xor'ing 111 and 32
xor'ing 111 and 116
xor'ing 111 and 104
xor'ing 111 and 101
xor'ing 111 and 32
xor'ing 111 and 112
xor'ing 111 and 114
xor'ing 111 and 111
xor'ing 111 and 106
xor'ing 111 and 101
xor'ing 111 and 99
xor'ing 111 and 116
xor'ing 111 and 10
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 118
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and -88
xor'ing 111 and -31
xor'ing 111 and -94
xor'ing 111 and 2
xor'ing 111 and -120
xor'ing 111 and 127
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and -57
xor'ing 111 and 115
xor'ing 111 and -33
xor'ing 111 and 2
xor'ing 111 and -120
xor'ing 111 and 127
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 1
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and -19
xor'ing 111 and 9
xor'ing 111 and 64
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 47
xor'ing 111 and 47
xor'ing 111 and 47
xor'ing 111 and 47
xor'ing 111 and 47
xor'ing 111 and 47
xor'ing 111 and 47
xor'ing 111 and 47
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and 0
xor'ing 111 and -96
xor'ing 111 and 9
xor'ing 111 and 64
xor'ing 111 and 0
这些random 元素是从哪里来的?
【问题讨论】:
-
对超长的打印感到抱歉
-
如果将它们放在代码块中,它们将是可滚动的。
-
无论您从文件中读取的实际字节数 (
read_elements) 如何,您都可以对 100 个字节 (while(read_counter < 100)) 进行异或操作。所以垃圾来自read_buffer[]的未初始化部分。 -
还有一个优先级错误,所以
read_elements在循环中总是1。 -
不,您应该只处理实际读取的字符数。