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

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

Восстановить пароль Регистрация
 
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
27.04.2014, 23:39     Вывод мусора после отработки функции #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
#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);
помогло, только вот интересно почему когда вывожу результат в ф-ции, вывод правильный?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 23:39     Вывод мусора после отработки функции
Посмотрите здесь:

Укоротить переменную от мусора в конце. C++
Сборка мусора C++
C++ Сборщик мусора
C++ после отработки программы не закрывается консолька
Уборка мусора из double C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
27.04.2014, 23:51     Вывод мусора после отработки функции #2
Цитата Сообщение от D_Ok Посмотреть сообщение
char * str = new char[];
А как это так компилируется?
D_Ok
43 / 32 / 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++ Функции и сборка мусора

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

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

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

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