Файловые операции на C - PullRequest
       1

Файловые операции на C

0 голосов
/ 28 апреля 2011

Я записал динамический массив в файл. (Ширина 100) И я прочитал его из файла.

Но я понял, что не могу прочитать все элементы, которые я выкладываю из памяти.

Пример кода ниже:

main()
{
    FILE *file;
     int *numbers;
     int *numbers2;

     numbers = (int *)malloc(100*sizeof(int));
     numbers2 = (int *)malloc(100*sizeof(int)); 


    int i,j,tane;

    file=fopen("numbers.txt","w++");

    for(i=0;i<100;i++)
    { numbers[i]=i;}

    if(file==NULL)
    {printf("Error:File cannot open \n");
     return 1;
    }


    else {
          fwrite(numbers,4,100,file);

         }
    rewind(file);

    printf("Numbers read from file:\n");
    tane=fread(numbers2,4,100,file);
    for(i=0;i<tane;i++)
    { printf("%d ",numbers2[i]);}


    fclose(file);
    getch();
}

Я вижу 0-25 элементов, которые напечатаны буквой C. Я не могу понять, что все элементы не печатаются. (От 0 до 100)

Не могли бы вы помочь мне, пожалуйста?

С наилучшими пожеланиями ...

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Вы открываете свой файл в режиме text , но вы записываете двоичные данные. Попробуйте fopen("numbers.txt", "wb+") вместо.

1 голос
/ 28 апреля 2011

Полагаю, sizeof (int) в вашей реализации не равно 4.

Я уверен, что это sizeof (int).Попробуйте использовать sizeof (int) вместо магических констант.Еще лучше было бы использовать сам объект в качестве операнда для sizeof ...

fwrite(numbers, sizeof *numbers, 100, file);
/*     also get rid of the MAGIC 100      */
0 голосов
/ 28 апреля 2011

Функция Fread возвращает количество прочитанных строк, а не количество символов, хорошо? http://www.cplusplus.com/reference/clibrary/cstdio/fread/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...