putc () пишет неверные данные - PullRequest
0 голосов
/ 08 января 2012
int writeFile(FILE * handle, char * data, int len)
{
    fseek(handle, 0, SEEK_SET);
    for(int i=0; i <= len; i++)
        putc(data[i], handle);
}

Когда я вызываю эту функцию, она работает нормально, но если на char * data есть символ 0x1A, он будет писать бесчисленное количество 0xFF.Почему это так?

Ответы [ 2 ]

6 голосов
/ 08 января 2012

Hex 0x1A также известен как Control-Z.

В Windows (ну, DOS его создал) текстовые файлы обозначают EOF, встраивая в файл control-Z.

ЕслиВы хотите записать двоичные данные, убедитесь, что выходной файл открыт в виде двоичного файла.Если вы открываете его как текстовый файл, выводите только текст (что означает очень ограниченные управляющие символы; возможно, это просто вкладки и символы новой строки, а система заботится о отображении CRLF <-> LF).

2 голосов
/ 08 января 2012

Вы пишете len+1 символов вместо len символов.

Измените:

for(int i=0; i <= len; i++)

на:

for(int i=0; i < len; i++)

(обратите внимание, что этоошибка уже упоминалась в комментариях к вашему предыдущему вопросу - обязательно прочитайте все ваши ответы и комментарии.)

...