Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Xleb
1 / 1 / 1
Регистрация: 07.03.2015
Сообщений: 73
#1

Не могу разобраться как передать корректно передать массив из функции в функцию

07.10.2016, 19:54. Просмотров 426. Ответов 2
Метки нет (Все метки)

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
#include<stdlib>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<iostream.h>
#include <time.h>
using namespace std;
struct MyTDate
{
  unsigned int year;
  unsigned int month;
  unsigned int day;
};
//--------------------------------------------------------------
void init1(MyTDate& date, int year,int month,int day)
{
date.year = year;
date.month = month;
date.day = day;
}
//-------------------------------------------
void init2(MyTDate& date,char *DateStroka){
  date.year = atoi(DateStroka);
  date.month = atoi(DateStroka + 5);
  date.day = atoi(DateStroka + 8);
}
//-------------------------------------------------
void init3(MyTDate& date){
struct tm *theTime;
time_t tim;
time(&tim);
theTime = localtime(&tim);
date.year = (theTime->tm_year + 1900);
date.month = (theTime->tm_mon + 1);
date.day = theTime->tm_mday; ;
}
//---------------------------------------------------
 
char toPChar(MyTDate date){
int year = date.year;
int month = date.month;
int day = date.day;
   int system = 10;
   int system1 = 10;
   int system2 = 10;
   char Lenght[20];
   char Lenght1[20];
   char Lenght2[20];
   char *p ,*q ,*l ;
   p = itoa(year , Lenght , system );
   q = itoa(month , Lenght1 , system1 );
   l = itoa(day , Lenght2 , system2 );
   char str[80];
  strcpy (str,p);
  strcat (str,q);
  strcat (str,l);
  return *str;
 
}
 
 
 
 
void input(struct MyTDate *MyData)
{  int select;
        cout<<"1.Razdelno,2.stroka,3.online?";
        cin>>select;
    int y,m,d;   //for razdelno
    const int max=11 ;      //for lengh
  char DateStroka[max];     //for lengh
 
        switch (select){
   case 1:
   cout<<"write year,month,day razdelno";
   scanf("%d%d%d",&y,&m,&d);
   init1(*MyData,y,m,d);
   break;
        case 2:
        cin.ignore();
        cout<<"pishi year,month,day 4erez tochky";
        cin.get(DateStroka,max);
        init2(*MyData,DateStroka);
        break;
   case 3:
   init3(*MyData);
   break;
 
}
}
 
 
 
void output(struct MyTDate MyData){
char lengh1=toPChar(MyData);
cout<<lengh1;
}
 
int main(int argc, char* argv[])
{          MyTDate Monday;
        input(&Monday);
       
        output(Monday);
      system("PAUSE");
        return 0;
}
//---------------------------------------------------------------------------
Проблема с тем что из функции toPChar в функцию output передается не правильное значение. Я выводил в toPChar , все нормально, вывожу в output выводит какое то левое значение.Если можете помочь, буду благодарен.Просто не очень понимаю, где нужно передавать копии , где указатели и прочее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2016, 19:54
Ответы с готовыми решениями:

Как передать динамический массив из функции в другую функцию
Здравствуйте.Не могу передать массив из функции в функцию сортировки....

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив?
Допустим есть структура struct Base { int a; int b; int...

Не могу передать массив в функцию
Ситуация следующая: Хочу сделать функцию для умножения матриц А и В. Т.е....

Как передать массив в функцию так, чтобы при выходе из функции он не изменялся?
Задачка: есть строка, которая состоит из символов. Символы соединяються в...

Не могу передать двумерный массив в функцию
Мне нужно взять имеющийся двумерный массив передать его в функцию,...

2
VAN0
58 / 58 / 53
Регистрация: 05.05.2013
Сообщений: 150
Завершенные тесты: 1
07.10.2016, 20:04 #2
при выходе из toPChar кадр с объявленным массивом из стека удаляется, чтобы этого избежать массив str необходимо выделять в куче:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char* toPChar(MyTDate date){
int year = date.year;
int month = date.month;
int day = date.day;
   int system = 10;
   int system1 = 10;
   int system2 = 10;
   char Lenght[20];
   char Lenght1[20];
   char Lenght2[20];
   char *p ,*q ,*l ;
   p = itoa(year , Lenght , system );
   q = itoa(month , Lenght1 , system1 );
   l = itoa(day , Lenght2 , system2 );
   char* str = new char[80];
  strcpy (str,p);
  strcat (str,q);
  strcat (str,l);
  return str;
 
}
C++
1
2
3
4
void output(struct MyTDate MyData){
char* lengh1=toPChar(MyData);
cout<<lengh1;
}
когда str больше не будет использоваться необходимо освободить память с помощью
C++
1
delete [] str;
1
Xleb
1 / 1 / 1
Регистрация: 07.03.2015
Сообщений: 73
07.10.2016, 20:06  [ТС] #3
Огромная благодарность))А после этого нужно память очищать, или нет?
Увидел, благодарю))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2016, 20:06

как передать структуру в функцию, чтобы после выполнения функции он(массив в данном случае) вернулся измененным?
const int size = 256; struct MARKER { char mark; } void...

Передать массив в функцию и вернуть из функции
Доброго времени суток. Пытаюсь считать из файлов числа и попарно их...

Передача в функцию массива, и в функции передать массив не получаеться
Доброго дня. Вот в чем дело: Есть структура struct Cell { Point position;...


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

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

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