Чтение последовательных частей из текстового файла - PullRequest
0 голосов
/ 13 января 2012
    int fread(char cc[],int a[],int q)
    {
        ifstream infile;
        infile.open("C:\\Dev-Cpp\\DCS\\Decom\\a.txt",ios::binary);
        infile.read(cc,257);
        infile.close(); 

        for(int i=0;i<256;i++){a[i]=(unsigned char)cc[i];}
        return 0;
    }

Теперь q получает значение из счетчика потока, вот что я хочу сделать,

, если q равно 0, он читает первые 256 символов, а если q равно 1, он читаетсимволы от 256 до 512 и т. д.

Это правильный способ сделать это, если cc и a имеют массив размером 256 или есть более эффективный способ сделать это?

        int fread(char cc[],int a[],int q)
        {
            int ka=0,kb=0;
            kb=q*256; 
            ka=ka+256;
            ifstream infile;
            infile.open("C:\\Dev-Cpp\\DCS\\Decom\\a.txt",ios::binary);
            infile.seekg(256);
            infile.read(cc,ka);
            infile.close(); 

            for(int i=0;i<256;i++){a[i]=(unsigned char)cc[i];}
            return 0;
        }

Я получаю необработанное исключение в 0xb9fb2475 в s949.exe: 0xC0000005: Место чтения нарушения доступа 0xb9fb2475 при отладке в vc ++ 2010.

1 Ответ

1 голос
/ 13 января 2012

Ваша вторая версия fread близка.Вот некоторые проблемы, которые я обнаружил.
1. Название fread.Это обычная функция библиотеки C и C ++.Могут ли возникать проблемы в будущем, когда вызывается fread (какую версию они будут использовать?).
2. При передаче массивов следует также передавать емкость массива.
3. При передаче массивовв качестве источника объявите их как const.
4. При передаче массивов в качестве цели / пункта назначения используйте ссылку.
5. Не используйте массивы, std::vector намного безопаснее.
6. При позиционировании входного файла используйте свое значение, а не константу 256.
7. При определении позиций учитывайте размер записи.Если вы читаете целые числа, умножьте на sizeof(int).
8. Зачем читать в локальном буфере, а затем копировать в буфер клиента, когда вы можете непосредственно читать в буфер клиента?
9. Предпочитаете библиотечные процедуры, такие какstd :: copy, при копировании данных.

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