Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Fossil121
0 / 0 / 1
Регистрация: 29.06.2016
Сообщений: 94
1

Ошибка: нарушение прав доступа при записи по адресу

11.10.2018, 22:12. Просмотров 1543. Ответов 4
Метки нет (Все метки)

Надо написать следующую программу: дан символьный массив из 101 элемента. По спецификации %s вводится множество символов количеством не более 100. Определить сколько символов было введено. В 8-ой строке программа выдаёт ошибку: нарушение прав доступа при записи по адресу. Помогите исправить, заранее спасибо.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main()
{
    int a = 0;
    char str[101];
    
    scanf_s("%s", str);
     
    for (int i = 0; str[i] != '\0'; i++)
        a++;
        
    printf("%d", a);
 
    system("pause");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2018, 22:12
Ответы с готовыми решениями:

Нарушение прав доступа при записи по адресу 0x00007430
Подскажите, пожалуйста, почему при выполнении программы появляется Вызвано исключение по адресу...

Динамические массивы: Нарушение прав доступа при записи по адресу 0xCCCCCCCC
При запуске возникает ошибка &quot;Нарушение прав доступа при записи по адресу 0xCCCCCCCC&quot;. Помогите...

Сортировка qsort - Stack overflow, нарушение прав доступа при записи по адресу
Найдите, пожалуйста, ошибку в коде. Программа завершается с ошиибкой Stack overflow, и нарушение...

Нарушение прав доступа при записи по адресу 0х00000000 при добавлении элемента структуры
прошу помощи, выбивает эту ошибку при добавлении элемента структуры, также приму во внимание другие...

Вызвано исключение по адресу 0x75DD9845 (ucrtbase.dll) в LABA4.exe: 0xC0000005: нарушение прав доступа при записи по адр
Объясните пожалуйста, почему не работает программа? ( Выдает &quot;вызвано исключение...&quot; По идее она...

4
drfaust
336 / 222 / 80
Регистрация: 02.10.2008
Сообщений: 863
Записей в блоге: 1
Завершенные тесты: 1
11.10.2018, 22:46 2
Лучший ответ Сообщение было отмечено Fossil121 как решение

Решение

Цитата Сообщение от Fossil121 Посмотреть сообщение
scanf_s
Надо до конца внимательно дочитать хелп/MSDN и пр. для этой функции. В случае строк необходимо дополнительно указывать размер буфера.


Из MSDN https://msdn.microsoft.com/ru-ru/library/w40768et.aspx
В отличие от scanf и wscanf для scanf_s и wscanf_s требуется указать размер буфера для всех входных параметров типа c, C, s, S или наборы элементов управления строками, заключенные в []. Размер буфера в символах передается как дополнительный параметр, после которого сразу следует указатель на буфер или переменную.
The buffer size in characters is passed as an additional parameter immediately following the pointer to the buffer or variable.
Например, при чтении строки размер буфера для этой строки передается следующим образом:

char s[10];

scanf_s("%9s", s, (unsigned)_countof(s)); // buffer size is 10, width specification is 9
1
Fossil121
0 / 0 / 1
Регистрация: 29.06.2016
Сообщений: 94
11.10.2018, 23:14  [ТС] 3
drfaust, компилятор выдаёт ошибку: ссылка на неразрешенный внешний символ __countof в функции _main.
0
drfaust
336 / 222 / 80
Регистрация: 02.10.2008
Сообщений: 863
Записей в блоге: 1
Завершенные тесты: 1
12.10.2018, 00:06 4
Лучший ответ Сообщение было отмечено Fossil121 как решение

Решение

Цитата Сообщение от drfaust Посмотреть сообщение
C
1
scanf_s("%9s", s, (unsigned)_countof(s));
Цитата Сообщение от Fossil121 Посмотреть сообщение
ссылка на неразрешенный внешний символ __countof в
Цитата Сообщение от drfaust Посмотреть сообщение
В случае строк необходимо дополнительно указывать размер буфера
Вместо countof написать 100 не судьба? Если уж очень охота использовать именно этот макрос - попробуй добавить stdlib.h (Хотя это чисто мелкософтовая приблуда и неизвестно с какой версии MSVS оно появилось)
1
Kuzia domovenok
2559 / 2235 / 561
Регистрация: 25.03.2012
Сообщений: 8,087
Записей в блоге: 1
Завершенные тесты: 1
12.10.2018, 00:27 5
Fossil121, я вообще не понимаю, на кой чёрт тебе понадобился scanf_s, а не scanf?
0
12.10.2018, 00:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2018, 00:27

Нарушение прав доступа при чтении по адресу
Здраствуйте, задано переписать функцию strspn(canst char *s1, const char *s2) так чтоб она искала...

Нарушение прав доступа при чтении по адресу
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf #include &lt;stdio.h&gt;...

0xC0000005: нарушение прав доступа при чтении по адресу 0x00000003
Доброго времени суток!Возникла проблема при вводе в консоль массива , после ввода элементов консоль...


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

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

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