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

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

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

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

27.04.2014, 23:39. Просмотров 278. Ответов 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);
помогло, только вот интересно почему когда вывожу результат в ф-ции, вывод правильный?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 23:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод мусора после отработки функции (C++):

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

Программа закрывается сразу после отработки - C++
программа готова. Запускаю компилятор. Программа выполнена правильно, но окно сразу же закрывается! Какой код нужно вставить, чтобы окно...

Функции и сборка мусора - C++
Незнаю, туда ли поместил... Вобщем ситуация такая: про new(malloc()) и delete(free()) таки знаю немало, как и про динамическую(свободную)...

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции - C++
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть значение, отталкиваясь от первой. Возможно...

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

Очистка мусора - C++
1. Если я на форме, в процессе работы, буду очень часто менять изображения на одном и том же pictureBox, то форма будет занимать большой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
27.04.2014, 23:51 #2
Цитата Сообщение от D_Ok Посмотреть сообщение
char * str = new char[];
А как это так компилируется?
0
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
27.04.2014, 23:56  [ТС] #3
Цитата Сообщение от Denis123456789 Посмотреть сообщение
А как это так компилируется?
а почему, не должно компилироваться? Объявлен указатель на новый кусок памяти, ну а то что размера нету, так я же потом присваиваю ему адрес памяти... вроде так...
0
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 будет указывать на мусор, который находится сейчас в памяти, которую занимал массив до выхода из функции
1
Rioter
1 / 1 / 0
Регистрация: 27.04.2014
Сообщений: 19
28.04.2014, 00:13 #5
temp у тебя массив, а присваивая его название ты присваеваешь адрес первого элемента массива. Вот и выводит тебе адрес....

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

Добавлено через 2 минуты
Цитата Сообщение от Denis123456789 Посмотреть сообщение
И ,как я предполагаю, надо number в двоичную систему переводить, если так, то, тогда, надо перевернуть строку с двоичным кодом
да я знаю, то просто не доделал еще.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 00:36
Привет! Вот еще темы с ответами:

Сборщик мусора - C++
Доброго вам времени суток! У меня вопрос можно ли автоматизировать удаление объектов размещаемых в куче? (Желательно обойтись только STL).

Сборка мусора - C++
Нужна ли в Си ++ «сборка мусора»? Почему возникает такая проблема и как она решается в Си++?

Уборка мусора из double - C++
Подскажите, как убрать мусор из числа типа double. Например число 13 на самом деле не 13, а 13.00000001.

Укоротить переменную от мусора в конце. - C++
Добрый день. Хочу задать один вопрос. Я объявил 2 переменные. char rezstr; и char RetWhot; Первую в начале библиотеки использую...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.04.2014, 00:36
Ответ Создать тему
Опции темы

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