Странное поведение diff & cmp
Я написал программу, которая кодирует / декодирует текстовый файл, изменяя каждый символ в соответствии с определенной формулой (например, char - 3 * 22 + KEY). (не размещать здесь, потому что это домашнее задание)
Кажется, что все работает как задумано, потому что, когда я выполняю операции кодирования, а затем декодирования, я получаю исходный текст:
$ cat text.txt
Hello World
./encrypt text.txt out.txt 1
$ cat out.txt
`}%%(8o(+%|
./encrypt out.txt out2.txt -1
$ cat out2.txt
Hello World
Проблема в том, что команды diff и cmp жалуются на то, что визуально идентичные файлы на самом деле разные:
$ diff -a text2.txt out2.txt
1c1
< Hello World
---
> Hello World
text2.txt rev.txt differ: char 1, line 1
Конечных пробелов нет, но второй файл как-то на 2 байта больше.
Что может быть причиной этого?
ОБНОВИТЬ:
Декодированная версия всегда выдает два символа \0 в начале
$ od -c final.txt
0000000 \0 \0 H e l l o W o r l d \n A \n
0000020 B \n C
0000023
$ od -c text2.txt
0000000 H e l l o W o r l d \n A \n B \n
0000020 C
0000021
Почему я не вижу их в текстовом файле?