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

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

Войти
Регистрация
Восстановить пароль
 
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
#1

Вывод мусора после отработки функции - C++

27.04.2014, 23:39. Просмотров 247. Ответов 6
Метки нет (Все метки)

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
#include <iostream>
#include <conio.h>
void Binary(char *&,int);
using namespace std;
int main()
{
    int number;
    char * str = new char[];
    cin >> number;
    Binary(str, number);
    cout << str << endl; //вывод мусора
    return 0;
}
void Binary(char *&str, int number)
{
    char temp[20] = {};
    while (number)
    {
        if (number % 2)
            strcpy_s(temp + strlen(temp), strlen(temp) + 2, "1");
        else if (!(number % 2))
            strcpy_s(temp + strlen(temp), strlen(temp) + 2, "0");
        number =number/2;
    }
    str = temp;
    cout << str << endl; //нормальный вывод
}
собственно вывод str в функции правильный, а когда вывожу после, то выводит мусор какой-то(если выводить по элементу str[0],str[1]... то норм), что не так?

Добавлено через 11 минут
вместо
C++
1
str = temp;
написал
C++
1
strncpy_s(str, 20, temp, 20);
помогло, только вот интересно почему когда вывожу результат в ф-ции, вывод правильный?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
27.04.2014, 23:51     Вывод мусора после отработки функции #2
Цитата Сообщение от D_Ok Посмотреть сообщение
char * str = new char[];
А как это так компилируется?
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
27.04.2014, 23:56  [ТС]     Вывод мусора после отработки функции #3
Цитата Сообщение от Denis123456789 Посмотреть сообщение
А как это так компилируется?
а почему, не должно компилироваться? Объявлен указатель на новый кусок памяти, ну а то что размера нету, так я же потом присваиваю ему адрес памяти... вроде так...
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
28.04.2014, 00:09     Вывод мусора после отработки функции #4
объявлен указатель это вот
C++
1
char * str
C++
1
char * str = new char[n];
так мы выделяем память под блок ячеек кол-ва n и присваиваем адрес начала этого блока указателю str, число ячеек должно быть указано, иначе сколько памяти выделять?
Мусор выводится потому что, вы присваиваете указателю str, адрес первого эл. массива, который (массив) находится в стековой памяти, и разрушается во время возврата из функции, соответственно в функции main на str будет указывать на мусор, который находится сейчас в памяти, которую занимал массив до выхода из функции
Rioter
1 / 1 / 0
Регистрация: 27.04.2014
Сообщений: 19
28.04.2014, 00:13     Вывод мусора после отработки функции #5
temp у тебя массив, а присваивая его название ты присваеваешь адрес первого элемента массива. Вот и выводит тебе адрес....

Добавлено через 1 минуту
Циклом выводи всю строку
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
28.04.2014, 00:16     Вывод мусора после отработки функции #6
я бы всё это как-нибудь так бы делал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
void Binary(char *&,int);
using namespace std;
int main()
{
    int number;
    char * str=new char[20];
    cin >> number;
    Binary(str, number);
    cout << str << endl;
    return 0;
}
void Binary(char *str, int number)
{
    int i=0;
    while (number)
    {
        str[i]=number%2+'0';
        i++;
        number =number/2;
    }
    str[i]='\0';
}
И ,как я предполагаю, надо number в двоичную систему переводить, если так, то, тогда, надо перевернуть строку с двоичным кодом
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 00:36     Вывод мусора после отработки функции
Еще ссылки по теме:

Программа закрывается сразу после отработки C++
C++ Не срабатывает деструктор, и звук издает винда по окончанию отработки программы
C++ Функции и сборка мусора
C++ Компилятор генерирует мегабайты мусора
C++ Очистка мусора

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

Или воспользуйтесь поиском по форуму:
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
28.04.2014, 00:36  [ТС]     Вывод мусора после отработки функции #7
Цитата Сообщение от Denis123456789 Посмотреть сообщение
так мы выделяем память под блок ячеек кол-ва n и присваиваем адрес начала этого блока указателю str, число ячеек должно быть указано, иначе сколько памяти выделять?
хмм, точно... тогда хз, почему не выдало ошибку или предуприждение

Добавлено через 2 минуты
Цитата Сообщение от Denis123456789 Посмотреть сообщение
И ,как я предполагаю, надо number в двоичную систему переводить, если так, то, тогда, надо перевернуть строку с двоичным кодом
да я знаю, то просто не доделал еще.
Yandex
Объявления
28.04.2014, 00:36     Вывод мусора после отработки функции
Ответ Создать тему
Опции темы

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