Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Роман Шутов
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 41
#1

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

22.09.2012, 14:38. Просмотров 865. Ответов 5
Метки нет (Все метки)

И объясните пожалуйста, все ли правильно и нужно ли эти файлы самому создавать, если да то где.

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

#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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2012, 14:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало? (C++):

Выдает ошибку и не читает текст(составить программу для чтения текста) - C++
Надо было составить программу чтобы считывала текст из файла и выводила количество маленьких (4-8 символов) слов во всех строках текста ...

Изучаю книгу, выдает ошибку в коде, подскажите где и что нужно сделать? - C++
Добрый день, я вот тут изучаю C++, переписал упражнение в компилятор а он выдает ошибку, подскажите пожалуйста как исправить? #include...

Ребят Незнаю что делать при запуске на компилирование выдает ошибку.Кто понимает что не так скажите а если не затруднит исправьте ошибку - C++
Разговаривал с двумя преподами говорят что проект не правильно создавал,хотя все правильно из группы спрашивал у парней говорят что не...

Что не так в коде? Рассчитать значение у для значений х. Code::Blocks выдает ошибку. - C++
рассчитать значение у для значений х, равных 4, 5, ..., 28,. на формулу не смотрите, фишка в том что код блокс выдает ошибку но в коде я...

Элементарный класс для работы с файлами, компилятор выдает ошибку, что не так с private - C++
#include &lt;ctime&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include...

Как сделать так чтоб работало? Что с компилятором? - C++
ошибка: No such file or directory #include &lt;iostream&gt; using namespace std; int main() {const int n=15; int i;double...

5
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 14:47 #2
отредактируйте сообщение, чтоб был код читабельный используйте вкладку С++
0
I.M.
565 / 548 / 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 - это что еще за сокращение? похоже на какие-то немецкие танковые войска

0
-=ЮрА=-
Заблокирован
Автор 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) - он вне стандарта.
Аттачу готовый проект
1
Миниатюры
Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало?  
Вложения
Тип файла: 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 к длине)

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

что не так в программе, выдает ошибку... - C++
помогите разобраться, пожалуйста, что не так?

что делать если выдает такую ошибку? - C++
--------------------Configuration: 5 - Win32 Debug-------------------- Compiling... 5.cpp h:\5\5\5.cpp(21) : fatal error C1010:...

Выдает ошибку,тут что не так? Простейший класс - C++
#include&lt;conio.h&gt; #include&lt;io.h&gt; #include&lt;string.h&gt; #include&lt;iostream.h&gt; #include&lt;math.h&gt; ...

Нужно сделать по заданию задачу, выдает ошибку при компилировании - C++
Создать класс для работы сo строками. Разработать элементы класса: a. Поля: • * указатель на char - хранит адрес динамически выделенной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru