0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 13

Необработанное исключение, нарушение прав доступа при чтении

03.04.2016, 09:24. Показов 1871. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необработанное исключение по адресу 0x0F5E4654 (msvcr120d.dll) в Проект1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000

Ошибка вылазит при вызове функции strncpy()
я так понимаю наверно выход за границы чара. Только не понятно, я использую чары которые работают нормально, и при записи не увеличиваю размер, но вылазит ошибка.
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
#include <windows.h>
#include <Wininet.h>
#include <stdio.h>
#include <Tlhelp32.h>
#include <conio.h>
#include <Tchar.h>
#include <stdlib.h>
#include <wchar.h>
#include "stdafx.h"
#include <fstream>
#include <iostream>
#pragma comment(lib, "wininet.lib")
 
HINTERNET hInetOpen = 0;
HINTERNET hInetOpenUrl = 0;
char buffer[6400000];
DWORD readd = 0;
 
using namespace std;
 
int main()
{
    hInetOpen = InternetOpenA("c:\\totalcmd\\totalcmd\\totalcmd.exe", INTERNET_OPEN_TYPE_DIRECT, 0, 0, NULL);
    hInetOpenUrl = InternetOpenUrlA(hInetOpen, "https://www.cyberforum.ru/", 0, 3, INTERNET_FLAG_EXISTING_CONNECT, 0);
    InternetReadFile(hInetOpenUrl, buffer, sizeof(buffer), &readd);
 
    setlocale(0, ""); // включаем кириллицу в консоли
    char * fileName = "C:\\example.txt"; // Путь к файлу для записи
    FILE * file = fopen(fileName, "w");
    if (file) // если есть доступ к файлу,
    {
        char * str = (buffer); // инициализируем строку
        char * ring = 0;// strchr(str, 'Ц');// поиск символа Ц в строке str
        std::cout << (ring - str + 1) ;// определяем позицию символа
        std::strncpy(str, ring,4);//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!!!!
        bool result = fputs(str, file); // и записываем ее в файл
        if (!result){ // если запись произошла успешно
            std::cout << "Строка в файл успешно записана!" << endl; // выводим сообщение
        }
        fclose(file);
        return 0;
    }
    else
        std::cout << "Нет доступа к файлу!" << endl;
    fclose(file);
    return 0;
}
Если закоментить strncpy то работает. Но правда запись в файл происходит только определенной части страницы. Как бы можно было бы записать всю страницу. И собственно как избавится от ошибки???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2016, 09:24
Ответы с готовыми решениями:

Необработанное исключение: 0xC0000005: Нарушение прав доступа при чтении
Программа складывает и вычитает матрицы произвольной размерности, читаемые ею с файла. На самом выходе из программы вылетает данное...

Необработанное исключение в "0x1000bc48" в "*.exe": 0xC0000005: Нарушение прав доступа при чтении
Выдает ошибку после запуска приложения. Указывает на строчку : glutPassiveMotionFunc(MM);. Код: #include &quot;stdafx.h&quot; ...

"Необработанное исключение в "0x00417c85" в "oui2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000"."
Пишем программу в VS 2010 на С++ DirectX SDK (June 2010). Доходя до одной строчки появляется ошибка: &quot;Необработанное исключение в...

8
193 / 100 / 131
Регистрация: 23.06.2015
Сообщений: 249
03.04.2016, 11:06
ring == NULL, т. е он указывает в никуда, и попытка скопировать оттуда приведет к нарушению прав доступа при чтении по адресу 0x00000000
strchr возвращает не позицию символа, а указатель на него, или NULL, если символа нет.

C++
1
std::strncpy(str, ring,4);//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!!!!
Зачем, у вас в str уже храниться страница, а вы туда что-то перезаписываете.

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
#include <windows.h>
#include <Wininet.h>
#include <stdio.h>
#include <Tlhelp32.h>
#include <conio.h>
#include <Tchar.h>
#include <stdlib.h>
#include <wchar.h>
#include "stdafx.h"
#include <fstream>
#include <iostream>
#pragma comment(lib, "wininet.lib")
 
HINTERNET hInetOpen = 0;
HINTERNET hInetOpenUrl = 0;
char buffer[6400000];
DWORD readd = 0;
 
using namespace std;
 
int main()
{
    hInetOpen = InternetOpenA("c:\\totalcmd\\totalcmd\\totalcmd.exe", INTERNET_OPEN_TYPE_DIRECT, 0, 0, NULL);
    hInetOpenUrl = InternetOpenUrlA(hInetOpen, "https://www.cyberforum.ru/", 0, 3, INTERNET_FLAG_EXISTING_CONNECT, 0);
    InternetReadFile(hInetOpenUrl, buffer, sizeof(buffer), &readd);
 
    setlocale(0, ""); // включаем кириллицу в консоли
    char * fileName = "C:\\example.txt"; // Путь к файлу для записи
    FILE * file = fopen(fileName, "w");
    if (file) // если есть доступ к файлу,
    {
        char * str = (buffer); // инициализируем строку
        bool result = fputs(str, file); // и записываем ее в файл
        if (!result){ // если запись произошла успешно
            std::cout << "Строка в файл успешно записана!" << endl; // выводим сообщение
        }
        fclose(file);
        return 0;
    }
    else
        std::cout << "Нет доступа к файлу!" << endl;
    fclose(file);
    return 0;
}
Добавлено через 12 минут
Цитата Сообщение от MIHAnik22 Посмотреть сообщение
Как бы можно было бы записать всю страницу.
Передача происходит в несколько шагов:
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
#include <windows.h>
#include <Wininet.h>
#include <stdio.h>
#include <Tlhelp32.h>
#include <conio.h>
#include <Tchar.h>
#include <stdlib.h>
#include <wchar.h>
#include <clocale>
#include <iostream>
#pragma comment(lib, "wininet.lib")
 
HINTERNET hInetOpen = 0;
HINTERNET hInetOpenUrl = 0;
char buffer[6400000];
DWORD readd = 0;
 
using namespace std;
 
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, int)
{
    hInetOpen = InternetOpenA("c:\\totalcmd\\totalcmd\\totalcmd.exe", INTERNET_OPEN_TYPE_DIRECT, 0, 0, NULL);
    hInetOpenUrl = InternetOpenUrlA(hInetOpen, "https://www.cyberforum.ru/", 0, 3, INTERNET_FLAG_EXISTING_CONNECT, 0);
    
    char * fileName = "D:\\example.txt"; 
    FILE *file; 
    
    do
    {
        InternetReadFile(hInetOpenUrl, buffer, sizeof(buffer), &readd);
        file = fopen(fileName, "a");
        fputs(buffer, file);
        fclose(file);
    }
    while(readd != 0);
    return 0;
}
0
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 13
03.04.2016, 13:54  [ТС]
Cuellius, я просто хотел сэкономить переменные. И записать в переменную str то что нашел в нем же. Чтобы это сделать лучше создать новый чар? А во втором примере вылазит ошибка при проходе внутри функции fputs()
на _VALIDATE_RETURN (stream != NULL)
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
int __cdecl fputs (
        const char *string,
        FILE *stream
        )
{
    int buffing;
    size_t length;
    size_t ndone = 0;
 
    _VALIDATE_RETURN((string != NULL), EINVAL, EOF);
    _VALIDATE_RETURN((stream != NULL), EINVAL, EOF);//<<<<<<<<<<<<<<<<!!!!
    _VALIDATE_STREAM_ANSI_RETURN(stream, EINVAL, EOF);
 
    length = strlen(string);
 
    _lock_str(stream);
    __try {
        buffing = _stbuf(stream);
        ndone = _fwrite_nolock(string,1,length,stream);
        _ftbuf(buffing, stream);
    }
    __finally {
        _unlock_str(stream);
    }
 
 
    return(ndone == length ? 0 : EOF);
}
Добавлено через 18 минут
соединил два этих кода, буфер заменил на str, вроде работает) не понятно только как выделить символы из строки, именно их мне надо записать в файл.
C++
1
2
3
char * nwstr[64000]
char * fndsymbl = strchr(str, 'Ц');
strncpy(nwstr, fndsymbl, 4)
это дает ошибку с Необработанным исключением и Нарушение прав доступа при чтении
0
3 / 3 / 0
Регистрация: 27.02.2014
Сообщений: 36
03.04.2016, 17:04
Цитата Сообщение от MIHAnik22 Посмотреть сообщение
char * nwstr[64000]
Здается мне, что ты хотель объявить массив символов, а не массив символьных указателей. Но если я не прав, то с логической точки зрения неверно что-то пытаться записать по адресу массива символьных указателей, предварительно неинициализированных.
0
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 13
03.04.2016, 17:17  [ТС]
Silvermatic, это уже следствие моих поисков в связи с ошибкой, которая написана в заглавии топика. Я не могу из полученного чара str выделить символы, их всего 4, и записать их в файл.
0
3 / 3 / 0
Регистрация: 27.02.2014
Сообщений: 36
03.04.2016, 18:12
MIHAnik22, после поиска символа проверь указатель *fndsymbl на равность NULL, ибо функция strchr может вернуть и такое, если ничего не найдет.
Ну и я не очень силен во всем, что касается веб-программирования, но разве символы вебстраниц представляются не в юникоде, при котором твоя искомая буква 'Ц' может никогда не найтись в однобайтовом скане строки?.
0
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 13
03.04.2016, 18:19  [ТС]
Silvermatic, может быть и так, я сам еще меньше тебя в этом разбираюсь) А если в UTF-8? Может найтись?
0
3 / 3 / 0
Регистрация: 27.02.2014
Сообщений: 36
03.04.2016, 18:33
MIHAnik22, не подскажу, ибо все эти кодировки для меня темный лес.
0
193 / 100 / 131
Регистрация: 23.06.2015
Сообщений: 249
03.04.2016, 19:56
Цитата Сообщение от MIHAnik22 Посмотреть сообщение
Silvermatic, может быть и так, я сам еще меньше тебя в этом разбираюсь) А если в UTF-8? Может найтись?
Лучше перевести этот UTF-8 в юникод. Там искать проще(в UTF-8 русская буква кодируется двумя символами, а в юникоде одним(но юникодным))
http://unicode-table.com/ - таблица символов юникода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2016, 19:56
Помогаю со студенческими работами здесь

Необработанное исключение в "0x00a78659" в "First.exe": 0xC0000005: Нарушение прав доступа при записи "0x0189f000"
Здравствуйте, вот столкнулся с ошибкой и не могу понять в чем причина, вроде все правильно сделал. Ошибку видает при нажатии кнопки...

Необработанное исключение в "0x77df15de" в "kursova.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcdcdd5"
как решить эту проблему? Необработанное исключение в &quot;0x77df15de&quot; в &quot;kursova.exe&quot;: 0xC0000005: Нарушение прав доступа при записи...

Нарушение прав доступа при чтении
Приветствую! Есть файл, для которого пишу парсер. Структура файла такова: какое-то количество каталогов, каждый из которых хранит...

Нарушение прав доступа при чтении
Пишу программу для роботы с базами данных. Скомпилирывал ошибок нема, но при запуске выдает вечно ошибку! вот скрин...

Нарушение прав доступа при чтении
Есть некоторая структура struct Person { char Surname; char Name; sex Sex; int Age; char Group; };


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

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

Новые блоги и статьи
Хак домофона или как открыть дверь по номеру
yariko 25.06.2025
Забыли дома ключ. Не проблема. Можно открыть дверь домофона, просто позвонив на свой номер квартиры. Идея состоит в следующем. Внутрь трубки абонента встраивается контроллер, который по звонку сам. . .
Как украсить новогоднюю елку с Q# и Qiskit
EggHead 24.06.2025
Что может быть необычнее, чем применить законы квантовой механики для украшения новогодней елки? Пока другие развешивают обычные гирлянды, я решил объединить свою страсть к квантовым вычислениям с. . .
Системы нулевого доверия на C#
UnmanagedCoder 24.06.2025
Традиционная архитектура безопасности работает по принципу средневекового замка: создаём высокие стены вокруг корпоративной сети, укрепляем ворота межсетевыми экранами и системами обнаружения. . .
Снова не мой путь. Циклическое среднее, я обеими руками за проверку условия, в ракурсе данной задачи - циклическое среднее в топку.
Hrethgir 24.06.2025
Привет. Такой вопрос - нужно выводить среднее математическое между двумя направлениями, интервал значений которых может лежать в диапазоне одного оборота по кругу. Проблема заключается в том, что. . .
Деплой Flask приложения
py-thonny 23.06.2025
За годы работы с Flask я натыкался на одни и те же грабли достаточно часто, чтобы наконец научится их обходить. И сегодня хочу поделится опытом, который сбережет вам немало нервных клеток. Начнем с. . .
WebAssembly и контейнеры в .NET Aspire для оркестрации распределенных архитектур
ArchitectMsa 23.06.2025
Я наблюдаю, как WebAssembly (или просто WASM) постепенно выходит за рамки своего первоначального предназначения — исполнения кода на стороне браузера. Теперь эта технология проникает в серверную. . .
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru