Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
1

ошибка при роботе с файлом "expresion str! = NULL"

20.11.2011, 16:23. Просмотров 2318. Ответов 21
Метки нет (Все метки)

не знаю почему, но выдает постоянно эту ошибку
вот нужная часть кода
C++
1
2
3
4
5
6
7
8
9
char pass[9];
    FILE *file;
        file=fopen("pas.txt","r+t");
        fgets(pass,8,file);
        fclose(file);
    if(strcmp(pass,str))
        return 0;
    else
        return 1;
файл был создан до компиляции ,с именем pas , и разширением .txt
в нем находился пароль из 8 символом и больше ничего
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 16:23
Ответы с готовыми решениями:

Найти ошибку в коде. Выдает "line 55 expresion str!=null"
Ребятки помогите пожалуйста , вылетает вот такая ошибка :line 55 expresion...

Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9"
class Hdd { public: char Hdd_name; int total_space; int free_space;...

Что происходит при char *str = ""?
Объясните, пожалуйста, что происходит при const chat *str = "hello" Т.е. тут...

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf"
Сделал многофайловую программу программу, вот она: //golf.h #include...

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout
Добрый день! Переписал код из книг Лафоре, создание мультимножества из...

21
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.11.2011, 16:26 2
Цитата Сообщение от shaffle Посмотреть сообщение
char pass[9];
а если массив объявить так
C++
1
char pass[9] = { 0 };
а считывать вот так
C++
1
fgets(pass, 9, file);
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2011, 16:27 3
shaffle, а str это что такое? И, кстати, всяческие fopen, fgets неплохо бы на ошибки проверять. Вместо strcmp лучше использовать strncmp.
0
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 16:28  [ТС] 4
не помогло..

Добавлено через 52 секунды
str я передаю в функцию, он вводиться в мейне..
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2011, 16:29 5
Цитата Сообщение от shaffle Посмотреть сообщение
str я передаю в функцию, он вводиться в мейне
Как вводится, как передается? Чтобы не тянуть резину, я сейчас намекаю на то, что неплохо бы выложить побольше кода.
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
20.11.2011, 16:29 6
shaffle, как вы str инициализировали?
0
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 16:34  [ТС] 7
проверил, при открытии file==0 , и закрыл файл
проверил так

C++
1
2
3
4
5
//........
if (file==0) 
exit(-1);
else
//......
Добавлено через 2 минуты
кода там многовато с лишними функциями, поэтому я кину только то, что касаеться этой пробелмы
вот инициалезация и передача str
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     
    char pass[9];
    for ( ; ; )
    {
        cin.sync();
        system("cls");
        if(!count) 
            exit(3);
        cout<<"Введите пароль для запуска программы\n";
        cout<<"Кол-во попыток: "<<count<<endl;
        cin>>pass;
        if (check_pass(pass)==1)
{//....}
else
{//....}
count статическая глобальная переменная которая по умолчанию = 3;

вот тело функции и с паролем

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool check_pass(char str[])
{
    char pass[9] = { 0 };
    FILE *file;
 
 
        file=fopen("pas.txt","r+t");
        
                            if (file==0) 
                                exit(-1);
                            else
        fgets(pass,9,file);
        fclose(file);
    if(strcmp(pass,str))
        return 0;
    else
        return 1;
}
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
20.11.2011, 16:34 8
shaffle,
C
1
2
3
4
if ( ( file = fopen("pass.txt" , "r")) != NULL) 
        fgets (pass,10,file);
    else
        printf ("error");
0
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 16:36  [ТС] 9
Цитата Сообщение от go Посмотреть сообщение
shaffle,
C
1
2
3
4
if ( ( file = fopen("pass.txt" , "r")) != NULL) 
        fgets (pass,10,file);
    else
        printf ("error");
error выводит
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2011, 16:38 10
shaffle, ну так проверьте файл на существование, корректность имени, может он залочен другими приложениями и т.д. Мы тут уже не сможем помочь.
0
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 16:39  [ТС] 11
Цитата Сообщение от fasked Посмотреть сообщение
shaffle, ну так проверьте файл на существование, корректность имени, может он залочен другими приложениями и т.д. Мы тут уже не сможем помочь.
то есть дело не в коде?
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
20.11.2011, 16:39 12
shaffle, укажите правильно полный путь к файлу.
0
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 16:41  [ТС] 13
file=fopen("C:\Users\Диииииима\Documents\Dima\C++\2\all on one - копия\pas.txt","r+t");
не сработало..
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
20.11.2011, 16:42 14
shaffle, закинте файл на флэшку например
и укажите путь ввиде только диска
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.11.2011, 16:43 15
Цитата Сообщение от shaffle Посмотреть сообщение
file=fopen("C:\Users\Диииииима\Documents\Dima\C++\2\all on one - копия\pas.txt","r+t");
не сработало..
обратный слеш должен быть двойным \\ либо ставте прямой слеш /
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
20.11.2011, 16:43 16
например "I:\\pass.txt"
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2011, 16:43 17
shaffle, ну во-первых обратный слэш является экранирующим символом. Надо использовать два бэкслэша. Во-вторых кириллица в пути может сильно подтпортить ситуацию.
1
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 16:48  [ТС] 18
спасибо. с полным путем обратные помогло
не знал на счет \\ и / для полного пути
спасибо
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.11.2011, 18:54 19
shaffle, попробуйте читать fread, также помните что char pass нужно завершать нуль-терминатором, проще всего обнулить её элементы в самом начале, как сделал ниже, ну и не забывайте проверить сумела ли ваша программа получить доступ к файлу if(!file)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
char pass[9] = {0};
FILE *file=fopen("pas.txt","rt+");
if(!file)
       printf("Error open pas.txt\n";
else
{
       fread(pass,1,8*sizeof(char),file);
       fclose(file);
}
if(strcmp(pass,str))
    return 0;
else
    return 1;
0
shaffle
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 19:38  [ТС] 20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
shaffle, попробуйте читать fread, также помните что char pass нужно завершать нуль-терминатором, проще всего обнулить её элементы в самом начале, как сделал ниже, ну и не забывайте проверить сумела ли ваша программа получить доступ к файлу if(!file)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
char pass[9] = {0};
FILE *file=fopen("pas.txt","rt+");
if(!file)
       printf("Error open pas.txt\n";
else
{
       fread(pass,1,8*sizeof(char),file);
       fclose(file);
}
if(strcmp(pass,str))
    return 0;
else
    return 1;
не работает, пишет что еррор опен пас.тхт

вобще надо не удобно чтто там адресс к файлу полный
так скидываешь кому то екзешник и файл, и не заработает
может ктото знает как исправить эту проблемку?
0
20.11.2011, 19:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 19:38

Из-за чего может возникать следующая ошибка: "Invalid null pointer"?
NEBTELA* fggff; //указатель на объект базового класса fggff = new Zvezda;...

При компиляции ошибка: C2228: left of ".real",".imag" must have struct/class/union
Помогите, пожалуйста! Компилирую в VS2010... Ошибка: C2228: left of...

Возникает ошибка "0xC0000005: Нарушение прав доступа при чтении "0xfeeefee2"."
Подскажите, пожалуйста, в чем может быть ошибка и как его исправить? В...


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

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

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