Форум программистов, компьютерный форум CyberForum.ru

Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? - C++

Восстановить пароль Регистрация
 
Роман Шутов
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 41
22.09.2012, 14:38     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? #1
И объясните пожалуйста, все ли правильно и нужно ли эти файлы самому создавать, если да то где.

Дан файл, содержащий несколько строк. Найти максимальную длину строки и вывести в новый файл все строки, имеющую такую длину.

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

#define MAX 256

int main()
{
FILE* fp = NULL;
const char* filename[2] = { "input.txt", "output.txt" };

if ((fp = fopen(filename[0], "r")) == NULL)
{
printf("Unable to open file %s for reading\0",filename[0]);
return 0;
}

char **ppsz = new char*[MAX], *str = "\0";
for (int i = 0; fgets(str, MAX, fp) != NULL; i++)
{
ppsz[i] = new char[MAX];
strcpy(ppsz[i++], str);
}

fclose(fp);

int len = 0, max = 0;
for (int t = 0; ppsz[t] != NULL; t++)
if ((len = strlen(ppsz[t])) > max)
max = len;

if ((fp = fopen(filename[1], "w")) == NULL)
{
printf("Unable to open file %s for writing\0",filename[1]);
return 0;
}

for (int q = 0; ppsz[q] != NULL; q++)
if (strlen(ppsz[q]) == max) fprintf(fp,"%s\n",ppsz[q]);

fclose(fp);

_getch();

return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2012, 14:38     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало?
Посмотрите здесь:

что не так в программе, выдает ошибку... C++
C++ подскажи что можно сделать? присоздании шаблона выдает ошибки
что делать если выдает такую ошибку? C++
C++ Элементарный класс для работы с файлами, компилятор выдает ошибку, что не так с private
C++ Нужно сделать по заданию задачу, выдает ошибку при компилировании
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 14:47     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? #2
отредактируйте сообщение, чтоб был код читабельный используйте вкладку С++
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
22.09.2012, 16:09     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? #3
C++
1
2
3
4
5
for (int i = 0; fgets(str, MAX, fp) != NULL; i++)
 {
 ppsz[i] = new char[MAX];
 strcpy(ppsz[i++], str);
 }
Может дело в том, что дважды i инкриментируете?

Не по теме:

ppsz - это что еще за сокращение? похоже на какие-то немецкие танковые войска

-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2012, 16:40     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? #4
Роман Шутов, вот так будет работать
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
#define MAX 256
 
int main()
{
    FILE * fp = NULL;
    int i      = 0;//Счётчик
    size_t curLen = 0;//Текущая длинна строки
    size_t maxLen = 0;//максимальная длинна строки
    //Ну тогда уж выделяем память сразу статикой  к чему динамика была
    char ppsz[MAX][MAX] = {0};//понятное дело что накладываем ограничение 
    //файл размером не более 256 строк в которых не более 256 символов
    const char* filename[] = { "input.txt", "output.txt" };
    if(!(fp = fopen(filename[0], "r")))//Чтение
        printf("Unable to open file %s for reading",filename[0]);
    else
    {
        printf("\tString from file\n");
        //Цикл чтения м одновременнім поиском строки с мак длинной
        for(i = 0; !feof(fp); i = i + 1)
        {
            if(fgets(ppsz[i], MAX, fp))
            {
                curLen = strlen(ppsz[i]);
                if(maxLen < curLen)
                    maxLen = curLen;
                printf(ppsz[i]);
            }
        }
        fclose(fp);
        printf("maxLen = %d\n", maxLen);
        printf("\tStrings with max len\n");
        if(!(fp = fopen(filename[1], "w")))//Запись
            printf("Unable to open file %s for writing",filename[1]);
        else
        {
            for(i = 0; *ppsz[i]; i = i + 1)
            {
                if(strlen(ppsz[i]) == maxLen)
                {
                    //пеатаем строку
                    printf("%s",ppsz[i]);// на экране
                    fprintf(fp,"%s",ppsz[i]);// в файл
                }
            }
            fclose(fp);
        }
    }
    getchar();//getch вне стандарта
    return 0;
}
http://codepad.org/UdOIXzoV
Файл "input.txt" должен быть в каталоге с программой (при тесте в каталоге проекта),
Теперь на счёт кода приведенного в посте1 - это смесь Си и С++, особенно коробит глаз
Цитата Сообщение от Роман Шутов Посмотреть сообщение
char **ppsz = new char*[MAX]
- в Си память так не выделяется, также рекомендую изъять из алгоритма conio.h (ясное дело вместе с ним и getch) - он вне стандарта.
Аттачу готовый проект
Миниатюры
Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало?  
Вложения
Тип файла: rar getMaxStrC_proj.rar (6.8 Кб, 5 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2012, 16:54     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? #5
Вот вариант на плюсах
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
 
int main()
{
    fstream fp;
    int i         = 0;//Счётчик
    size_t curLen = 0;//Текущая длинна строки
    size_t maxLen = 0;//максимальная длинна строки
    string line;//Будет содержать данные текущей строки из файла
    //Ниже объявление контейнера для хранения строк
    vector<string> ppsz;
    const char* filename[] = { "input.txt", "output.txt" };
    fp.open(filename[0], ios::in);////Чтение
    if(!(fp.is_open()))
        cout<<"Unable to open file "<<filename[0]<<" for reading"<<endl;
    else
    {
        cout<<"\tString from file\n";
        //Цикл чтения м одновременнім поиском строки с мак длинной
        for(i = 0; !fp.eof(); i = i + 1)
        {
            if(getline(fp, line))
            {
                curLen = line.length();
                if(maxLen < curLen)
                    maxLen = curLen;
                ppsz.push_back(line);//Добавили строку в контейнер
                cout<<line<<endl;
            }
        }
        fp.clear();
        fp.close();
        cout<<"maxLen = "<<maxLen<<endl;
        cout<<"\tStrings with max len\n";
        fp.open(filename[1], ios::out);//Запись
        if(!(fp.is_open()))
            cout<<"Unable to open file "<<filename[1]<<" for reading"<<endl;
        else
        {
            for(i = 0; i < ppsz.size(); i = i + 1)
            {
                if((ppsz[i]).length() == maxLen)
                {
                    //пеатаем строку
                    cout<<ppsz[i]<<endl;// на экране
                    fp<<ppsz[i]<<endl;// в файл
                }
            }
            fp.clear();
            fp.close();
        }
    }
    ppsz.clear();//Чистка памяти
    getchar();//getch вне стандарта
    return 0;
}

Не по теме:

Разница в длинах макс строки 5(вариант Си) - 4(вариант С++) объясняется тем, что fgets считывает строку со \n тем самым в Си-ном варианты строки имели длину на +1 символ большую нежели на самом деле(но на сам алгоритм это не повлияло, потмоу как все строки имели +1 к длине)

Миниатюры
Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало?  
Роман Шутов
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 41
23.09.2012, 00:42  [ТС]     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? #6
Вроде все работает, с файлами тоже сообразил, все ок, спасибо большое!
Yandex
Объявления
23.09.2012, 00:42     Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало?
Ответ Создать тему
Опции темы

Текущее время: 02:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru