Форум программистов, компьютерный форум CyberForum.ru

Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted - C++

Восстановить пароль Регистрация
 
Портовик
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 10
26.05.2013, 15:38     Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted #1
Здравствуйте, программа вырезает слова из строки, идущие до символа ';'. Она работает, но в конце, после вывода его на экран, вылетает ошибка: "Run-Time Check Failure #2 - Stack around the variable 'buf' was corrupted.". Не понимаю, почему переменная оказывается переполненной.
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
//#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h> // для exit
#include <cstring> //=string.h для работы со строками
#include <conio.h> //консольный ввод-вывод, _getch();
#include <fstream> //
#include <windows.h> //типы данных и макросы (setconsoleCP и SetConsoleOutputCP)
#include <iostream> //описание элементов для ввода-вывода (cin, cout)
using namespace std;
 
class records{
public:
    char *PromPred;
    records()
    {
        PromPred=new char;
    };
};
records obj;
void change(records &a,char *b)
{
    a.PromPred=new char[strlen(b)+1];
    strcpy(a.PromPred,b);
    }
 
void getrecord(records &a, char str[]){ //на вход подается целая строка str
    char str_array[9];
    long b;
    //cout<<"Введите str: ";
    //gets(str);
        b=strcspn(str,";");
        strncpy_s(str_array,str,b); //вырезаем слово до ';'
        strcpy(str,&str[2+b]); 
        cout<<endl;
        change(a,str_array);
}
 
int main(void)
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char buf[]="";
cout<<"Введите buf: ";
fgets(buf,100,stdin);
getrecord(obj,buf);
cout<<endl<<obj.PromPred;
_getch();
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 16:11     Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted #2
Цитата Сообщение от Портовик Посмотреть сообщение
char buf[]="";
C++
1
char buf[100]="";
Портовик
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 10
26.05.2013, 17:09  [ТС]     Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted #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
//#include "stdafx.h"
//#include <stdio.h>
#include <stdlib.h> // для exit
#include <cstring> //=string.h для работы со строками
#include <conio.h> //консольный ввод-вывод, _getch();
#include <fstream> //
#include <windows.h> //типы данных и макросы (setconsoleCP и SetConsoleOutputCP)
#include <iostream> //описание элементов для ввода-вывода (cin, cout)
using namespace std;
 
class records{
public:
    char *PromPred;
    char *FormSob;
    long Phone;
    records()
    {
        PromPred=new char;
        FormSob=new char;
        Phone=0;
    };
};
records obj;
void change(records &a,char *b, char *c,long &g)
{
    a.PromPred=new char[strlen(b)+1];
    strcpy(a.PromPred,b);
    a.PromPred=new char[strlen(c)+1];
    strcpy(a.FormSob,c);
    a.Phone=g;
}
 
void getrecord(records &a, char str[]){ //на вход подается целая строка str
    char str_array[2][20]={0};
    long b;
    //cout<<"Введите str: ";
    //gets(str);
    for(int i=0; i<2; i++){
        b=strcspn(str,";");
        strncpy_s(str_array[i],str,b);  
        strcpy(str,&str[2+b]);
    }
    b=atol(str);
    change(a,str_array[0],str_array[1],b);
}
 
int main(void)
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char buf[80]={0};
cout<<"Введите buf: ";
fgets(buf,sizeof(buf),stdin);
getrecord(obj,buf);
cout<<endl<<obj.PromPred<<" "<<obj.FormSob<<" "<<obj.Phone;
_getch();
return 0;
}
Выводит ерунду:
Миниатюры
Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted  
Портовик
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 10
26.05.2013, 17:39  [ТС]     Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted #4
Разобралась)
Yandex
Объявления
26.05.2013, 17:39     Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted
Ответ Создать тему
Опции темы

Текущее время: 20:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru