Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Origamo
0 / 0 / 0
Регистрация: 06.09.2016
Сообщений: 20
Завершенные тесты: 1
#1

Объяснить неожиданное поведение программы при использовании массивов и функции strcpy() - C++

11.09.2016, 19:11. Просмотров 133. Ответов 1
Метки нет (Все метки)

Посмотрел в отладчике,получается,что конструктор берет переменную l[15],вместо k[1] и записывает ее в sym[1] ,почему?
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
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
 
class Symbol
{
private:
    char sym[1];
public:
    Symbol(char s1[1])
    {
        strcpy_s(sym,s1);
    }
    void print()
    {
        cout << "Inputed symbol:" << sym << endl;
    }
};
 
class Write
{
private:
    char sym[1];
    char string[15];
public:
    Write(char s[1], char str[15])
    {
        strcpy_s(sym, s);
        strcpy_s(string, str);
    }
    void print()
    {
        cout << "Symbol value=" << sym << endl;
        cout << "Massive value:" << string << endl;
    }
 
};
int main()
{
    char k[1], l[15];
    cout << "Input symbol" << endl;
    cin.getline(k,2); 
    cout << "Input string" << endl;
    cin.getline(l,16);
    Symbol obj(k);
    obj.print();
    Write obj1(k, l);
    obj1.print();
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2016, 19:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Объяснить неожиданное поведение программы при использовании массивов и функции strcpy() (C++):

Вычислить значение функции (неожиданное поведение программы - как исправить?) - C++
Мне нужно вичислить значение функции у= (4*(x^3)-2*(x^2)+5);для значении x от -3 до 1.Написан такой код: #include&lt;stdio.h&gt; ...

Неожиданное поведение программы: почему при делени с остатком, в условии if получается true? - C++
Ребят не могу понять #define N 64 int length=12; if ((N - 1) % matrix != 0) В переменной matrix хранятся значения...

Неожиданное поведение программы: исправить ошибку в коде - C++
извиняюсь за возможно глупый вопрос, но почему программа говорит,что в выделенной строке ошибка? хотел написать в ней: а в квадрате + в в...

Неожиданное поведение программы: почему не работает цикл while? - C++
Проблема: Цикл While при != является бесконечным ,а при == не выполняется ни разу Ожидаемое поведение: После входа в цикл N должно быть...

Неожиданное поведение программы: почему не работает цикл do while? - C++
Здравствуйте,подскажите,пожалуйста,почему не работает цикл ... Условие корявое? //Напишите программу, которая по начальной сумме денег...

Неожиданное поведение программы: найти ошибку в коде - C++
Программа запрашивает у пользователя «Сколько Вам лет?» . Вы вводите положительное число до 100. Программа должна выдать пол-ный ответ «...

1
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
11.09.2016, 19:22 #2
Origamo, функция strcpy надеется на завершающий ноль, который в твоем случае (массив из одного элемента) отсутствует. Вот и идет она гулять по чужой памяти, пока этот самый ноль не встретит.
Нужен если тебе один символ, то работай с ним как с символом, а не строкой.

Добавлено через 5 минут
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
class Symbol
{
private:
    char sym;
public:
    Symbol(char s1) : sym(s1)
    { }
    void print()
    {
        cout << "Inputed symbol:" << sym << endl;
    }
};
 
class Write
{
private:
    char sym;
    char string[15];
public:
    Write(char s, char const * str)
        : sym(s)
    {
        strcpy_s(string, str);
    }
    void print()
    {
        cout << "Symbol value=" << sym << endl;
        cout << "Massive value:" << string << endl;
    }
 
};
int main()
{
    char k, l[15];
    cout << "Input symbol" << endl;
    cin.get(k);
    cin.ignore();
    cout << "Input string" << endl;
    cin.getline(l, sizeof(l));
    Symbol obj(k);
    obj.print();
    Write obj1(k, l);
    obj1.print();
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2016, 19:22
Привет! Вот еще темы с ответами:

Неожиданное поведение программы: почему программа внезапно завершает работу? - C++
Писал в codeblocks с компилятором gnu gcc. После запуска и ввода данных завершается работа программы. Словарь задан массивом...

Прохождение лабиринта: неожиданное поведение программы (найти и исправить ошибки) - C++
Всем доброго времени суток. В общем написал я программу для генерации лабиринта и программу для его прохождения. В первой генерирую...

Неожиданное поведение fflush(), неправильная работа функции - C++
Никак не пойму почему код не хочет работать последовательно, так, как я ему указал.Что не так я делаю с fflush? Функция запрашивает лишь...

Вычислить значение тригонометрического выражения (неожиданное поведение программы - как исправить?) - C++
Мне нужно вычислить значение выражения Я написал такой код , но с числами больше 6 не работает.Подскажите что не так? ...


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

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

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