Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 4

Переполнение буфера . Что делать ?

16.05.2014, 04:37. Показов 1399. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <string.h>
 
 
int main()
{
    char   in[80];          /* строка ввода */
    char   res1[80];        /* строка результата 1 */
    char   res2[80];        /* строка результата 2 */
    char*  cur;             /* ссылка на подстроку */
    char   modIn[80];       /* модиф. строка ввода */
    char   word[80];        /* строка слова */
    int    len, rc, i, n;
    int    lenIn;           /* длина строки ввода */
    int    lenCur;          /* длина подстроки */
    int    numW;            /* число слов в строке */
 
 
    printf("Input string; ended symbol '#' \r\n");
 
    /* Ввод исходной строки;
    между словами любое число пробелов;
    могут быть начальные и концевые пробелы;
    перед нажатием Enter ввести символ '#'
    */
    rc = scanf_s("%[^#]", in);            // строку вводим до символа '#'
    if (rc == -1)
    {
        printf("Error: input data\r\n");
        return 1;
    }
    printf("in = %s\r\n", in);
    lenIn = strlen(in);
 
    /* Модификация строки ввода;
    между словами будет только ОДИН пробел;
    начальные и концевые пробелы убраны;
    подсчитано число слов
    */
    cur = in;
    modIn[0] = '\0';
    lenCur = 0;
    numW = 0;
 
    while (lenCur != lenIn)
    {
        len = strspn(cur, " ");
        lenCur += len;
        cur += len;
        if (lenCur < lenIn)
        {
            numW++;
            len = strcspn(cur, " ");
            memcpy(word, cur, len);
            word[len] = ' ';
            word[len + 1] = '\0';
            strcat_s(modIn, word);
            lenCur += len;
            cur = cur + len;
        }
    }
    len = strlen(modIn);
    modIn[len - 1] = '\0';        // убрали последний пробел
    printf("modIn = %s\r\n", modIn);
 
    /* Разбиение входной строки на 2 подстроки */
    cur = modIn;
    n = numW / 2;
    for (i = 0; i < n; i++)
    {
        cur = strchr(cur, ' ');
        cur++;                    // сдвинулись с пробела
    }
    cur[-1] = '\0';
    res1[0] = '\0';
    strcat_s(res1, modIn);
    res2[0] = '\0';
    strcat_s(res2, cur);
    printf("res1 = %s\r\n", res1);
    printf("res2 = %s\r\n", res2);
 
    printf("Ending, not errors");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2014, 04:37
Ответы с готовыми решениями:

Возникло переполнение буфера, что привело к повреждению внутреннего состояния программы
Возникло переполнение буфера, помогите найти ошибку и, по возможности, исправить #include &quot;stdafx.h&quot; #include...

Переполнение буфера
Объясните почему вылетает ошибка и помогите исправить. Зарание спасибо возникло переполнение буфера, что привело к повреждению...

переполнение буфера
Что такое переполнение буфера?

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.05.2014, 11:46
Что и где переполняется?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
16.05.2014, 12:58
Раз основной вопрос уже задан, то пришло время вангования!
Цитата Сообщение от ack_c4 Посмотреть сообщение
Переполнение буфера . Что делать ?
Увеличивать буфер, или искать какой-нибудь безвыходный цикл, или еще какую ошибку. Точнее наоборот.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
16.05.2014, 13:15
Смысл этого кода постичь не в состоянии, но у вас очевидная логическая ошибка в (бесконечном) цикле while
Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <string.h>
 
#define BUF_SIZE              (80)
 
int main(int argc,char** argv)
{                                      
   char     pIn  [BUF_SIZE + 1];       // строка ввода
   char     res1 [BUF_SIZE + 1];       // строка результата 1
   char     res2 [BUF_SIZE + 1];       // строка результата 2
   char     modIn[BUF_SIZE + 1];       // модиф. строка ввода
   char     word [BUF_SIZE + 1];       // строка слова
 
   printf("Input string; ended symbol '#'\r\n");
 
   // Ввод исходной строки;
   // между словами любое число пробелов;
   // могут быть начальные и концевые пробелы;
   // перед нажатием Enter ввести символ '#'
   int   rc = scanf("%[^#]",pIn);            // строку вводим до символа '#'
 
   if (rc == -1)
   {  
      printf("Error: input data\r\n");
      return 1;
   }
 
   printf("in = %s\r\n",pIn);
   
   int   lenIn = strlen(pIn);
 
   // Модификация строки ввода;
   // между словами будет только ОДИН пробел;
   // начальные и концевые пробелы убраны;
   // подсчитано число слов
   char*    pCur = pIn;
 
   int   lenCur = 0;
   int   numW   = 0;
 
   *modIn = 0;
 
   int   len = 0;
 
   while (lenCur < lenIn)
   {  
      len = strspn(pCur," ");
 
      lenCur += len;
      pCur   += len;
      
      if (lenCur < lenIn)
      {  
         ++numW;
 
         len = strcspn(pCur," ");
         
         memcpy(word,pCur,len);
 
         word[len] = ' ';
         word[len + 1] = 0;
 
         strcat(modIn,word);
         
         lenCur += len;
         pCur   += len;
      }
   }
 
   len = strlen(modIn);
   
   modIn[len - 1] = 0;        // убрали последний пробел
 
   printf("modIn = %s\r\n",modIn);
 
   // Разбиение входной строки на 2 подстроки
   pCur = modIn;
 
   int   nn = numW / 2;
   
   for (int ii = 0; ii < nn; ++ii)
   {
       pCur = strchr(pCur,' ');
       ++pCur;                    // сдвинулись с пробела
   }
 
   pCur [-1] = 0;
   res1[0]   = 0;
 
   strcat(res1,modIn);
 
   res2[0] = 0;
 
   strcat(res2,pCur);
   
   printf("res1 = %s\r\n",res1);
   printf("res2 = %s\r\n",res2);
 
   printf("Ending, not errors");
 
   return 0;
}
Миниатюры
Переполнение буфера . Что делать ?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2014, 13:15
Помогаю со студенческими работами здесь

Переполнение буфера
Добрый день! В общем: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main(int argc, char* argv) { ...

Переполнение буфера
В программе имеется форма и записывается текстовые файлы. Когда она запускается всё работает нормально, ProgressBar доходит до...

Переполнение буфера
Не могу найти, где у меня ошибка, выдает переполнение буфера, подскажите пожалуйста. Здесь реализуется связный список #include...

Переполнение буфера
Подскажите, пожалуйста кто-нибудь, в чем беда... Во время выполения программы пишет, что буфер переполнен, что точка останова смещена и...

Переполнение буфера! (наверное)
Идет открытие порта звуковой карты, получение битов, запись битов в буфер и дальнейшие манипуляции с ним (пока только вывод в текстовый...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru