Проблемы с чтением целого числа из файла в C

У меня возникают проблемы при попытке прочитать целое число из текстового файла:

#include <stdio.h>
#include <string.h>

int main()
{  
    int op;

    /* Open file for both reading and writing */
    FILE *d = fopen("intento1.txt", "r");
    FILE *f = fopen("bubbletry.txt", "w+");

    /* Read and display data */
    fread(&op, 4, 1, d);

    printf("%d\n", &op);
    fclose(d);
    /* Write data to the file */
    fprintf(f,"%d\n",&op);

    fclose(f);

    return(0);
}

Первый номер в "inteto1.txt" 30771, но текст, написанный на "bubbletry.txt" 926363699, Не могли бы вы сказать мне, почему это происходит?

3 ответа

Потому что вы прочитали первые 4 байта inteto1.txt, "3", "0", "7", "7", в целое число. "3" - это 0x33, "0" - это 0x30, "7" - это 0x37. Таким образом, вы в конечном итоге читаете в 0x33303737, но поскольку вы используете архитектуру с прямым порядком байтов, байты обращаются к 0x37373033, который является шестнадцатеричным представлением 926363699, представление ascii, которое вы печатаете в файл с fprintf там.

Вам нужно отсканировать целое число из представления ascii, либо потянув строку и преобразовав ее, либо используя что-то вроде fscanf, Помните, что двоичное представление числа не совпадает с его представлением ASCII.

Обычно, чтобы прочитать целое число или тому подобное, вы можете использовать fscanf вместо. Это намного удобнее, чем fread,

fscanf( fp, "%d", &n );

Для примера, проверьте http://www.cplusplus.com/reference/cstdio/fscanf/

В дополнение к ответу относительно использования fread(), вы не передали предполагаемые аргументы своим функциям правильно. В то время как fread() требует указателя в качестве аргумента (указывающего на переменную) для чтения, оба printf() а также fprintf() требует, чтобы значение (не адрес!) отформатированного аргумента было напечатано. Таким образом, один и тот же синтаксис при передаче аргументов работает для обеих функций:

printf("%d\n", op);

fprintf(f,"%d\n", op);

Вам также может пригодиться чтение этих SO сообщений: fread, чтение текстовых файлов с помощью fread, fprintf.

Другие вопросы по тегам