Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
1

Подсчёт даты и winapi

09.01.2013, 08:22. Показов 3250. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Встал в ступор на таком задании:
1. Написать программу SLAVE , которая выводит день недели по дате, переданной в качестве параметра. Если параметр не передан, вывести об этом сообщение и закончить программу. Если программа запущена из приложения MASTER, вывести на экран уникальный идентификатор приложения MASTER Если программа запущена сама по себе, вывести об этом информацию.

2. Написать приложение MASTER которое:
генерирует дату (день, месяц, год – 2000...2010), запускает приложение SLAVE и передает в качестве параметров сгенерированную дату и уникальный идентификатор процесса (MASTER). При завершении программы SLAVE завершается MASTER
Как написать генератор даты что бы slave выводил день недели? И как собственно считать дни недели?
В ступоре полнейшем, даже не знаю с чего начинать.

Пишу не с пустыми руками, но всё равно не работает)
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
char GenerateDate(char *date[])
{
    char days[] = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", 
                    "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
                    "25", "26", "27", "28", "29", "30", "31", "\0"};
    char moths[] = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "\0"};
    char years[] = {"2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009",
                      "2010", "2011", "2012", "2013", "\0"};
    srand((unsigned)time(NULL));
    *date[0] = days[rand()%12+1];
        // и так далее
}
 
int main(int argc, char *argv[])
{
    char *date[9];
    GenerateDate(date);
 
    _getch();
}
 
 
 
Error   1   error C2078: too many initializers  9   1
Error   2   error C2078: too many initializers  12  1
Error   3   error C2078: too many initializers  13  1
Error   4   IntelliSense: expected a '}'        9   23
Error   5   IntelliSense: expected a '}'        12  24
Error   6   IntelliSense: expected a '}'        13  26
Ругается на char days, months, years. Вроде всё правильно делаю, но всё равно не так?

Я тут подумал, а можно сделать так: передавать приложению параметры в виде "C:\program.exe -date 01 -month 01 -year 2001" - такое же можно реализовать? Если да, то как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2013, 08:22
Ответы с готовыми решениями:

Подсчёт слов в строке. Подсчёт символов в словах строки
Начал изучение строк в С++. Решая задачу по поиску количества строк и количеству указанных символов...

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

Как сделать выборку периода даты в запросе с вычислением от запрошенной даты
Доброго времени суток! Есть форма, есть подчинённая форма, при запуске формы запрашивается...

Вывод даты из базы и подсчет строк где втстречаются эти даты
В таблице mysql есть поле где хранится дата. и это дата встречается в этой таблице по несколько...

23
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
09.01.2013, 09:14 2
ты любой учебник открой, тебе там скажут, что писать надо так:
C++
1
    char days_[] = {'1','2'};
Но никак не
C++
1
    char days_[] = {"1","2"};
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
09.01.2013, 09:48  [ТС] 3
Цитата Сообщение от kravam Посмотреть сообщение
ты любой учебник открой, тебе там скажут, что писать надо так:
C++
1
    char days_[] = {'1','2'};
Но никак не
C++
1
    char days_[] = {"1","2"};
Ёшкин кот, спасибо большое! Всегда с этим путался)
А есть соображения на счёт того, как генерировать дату и потом дни недели считать?
Я тут прикинул, минимальный год - 2000ый, т.е. определённое колличество дней мы уже имеем. Через свитчи подсчитаем и количество дней в месяцах + само число. А вот как из этого числа дней вытянуть день недели - ума не приложу.

И ещё вопрос: не подскажите winapi функции для этих задач?
Если программа запущена из приложения MASTER, вывести на экран уникальный идентификатор приложения MASTER Если программа запущена сама по себе, вывести об этом информацию.
в качестве параметров сгенерированную дату и уникальный идентификатор процесса (MASTER).
Добавлено через 6 минут
Число полученных дней можно поделить на 7, а остаток - это и будет день недели. А если поделится без остатка?
Вобщем совсем запутался.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
09.01.2013, 09:59 4
не winapi, но может пригодиться
http://lord-n.narod.ru/downloa... /16/16.htm
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
09.01.2013, 10:05  [ТС] 5
Цитата Сообщение от kravam Посмотреть сообщение
не winapi, но может пригодиться
http://lord-n.narod.ru/downloa... /16/16.htm
Не думаю что тут нужно использовать структуры каких то библиотек, скорее всего всё решается чисто логически с применением стандартных операторов языка си. А winapi функции мне нужны только для определения идентификаторов процессов и определения кем было запущено приложение.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
09.01.2013, 10:13 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
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <stdio.h> 
#include <Windows.h> 
#include <Winnt.h> 
#include <tlhelp32.h>
#include <vector>
#include <string> 
using namespace std;
 
 
FILE *f;
 
//принимает:
//И вектор имён процессов
bool f_ima_parrent_process (HANDLE, vector<string>);
 
                                  //+
                                  //+
                                  //+
                                  //+
                                  //+
bool SpisokProcessov ()  {
 
 //ЭТо вектор для имён процессво
 vector<string> vec;
 
 HANDLE hProcessSnap;
 
 PROCESSENTRY32 pe32;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 
 
 
 //Ищем процессы
 Process32First(hProcessSnap, &pe32);
 vec.push_back (string(pe32.szExeFile));
 while (Process32Next(hProcessSnap, &pe32)) {
  vec.push_back (string(pe32.szExeFile));
 } 
 
 f_ima_parrent_process (hProcessSnap, vec);
 CloseHandle(hProcessSnap);
 return true;
}
                                  //+
                                  //+
                                  //+
                                  //+
                                  //+
 
int main () {
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 
 
 f = fopen("rezultat.txt","wb");
 
 
// while (1) 
  SpisokProcessov ();
 fclose (f);
 getchar ();
 return 0;
}
                                  //+
                                  //+
                                  //+
                                  //+
                                  //+
bool f_ima_parrent_process (HANDLE hProcessSnap, vector<string> vec) {
 
  PROCESSENTRY32 pe32;
  DWORD ParrentPID= 0;
  pe32.dwSize = sizeof(PROCESSENTRY32);
 
  for (int i= 0; i< (int)vec.size(); i++) {
   char temp    [MAX_PATH];
   strcpy(temp, vec[i].c_str());
   char parrent [MAX_PATH];
 
 
   //Сперва найдём PID родительского процесса
   Process32First(hProcessSnap, &pe32);
   if (!strcmp (temp, pe32.szExeFile)) {
    ParrentPID= pe32.th32ParentProcessID;
   }
   else {
    while (Process32Next(hProcessSnap, &pe32)) {
     if (!strcmp (temp, pe32.szExeFile)) {
      ParrentPID= pe32.th32ParentProcessID;
      break;
     }
    }
   }
 
 
   //Теперь его имя
   if (ParrentPID) {
    Process32First(hProcessSnap, &pe32);
    if (ParrentPID== pe32.th32ProcessID) {
     strcpy (parrent, pe32.szExeFile);
    }
    else {
     while (Process32Next(hProcessSnap, &pe32)) {
      if (ParrentPID== pe32.th32ProcessID) {
       strcpy (parrent, pe32.szExeFile);
       break;
      }
     }
    }
   }
  
   
   //Вывод
   printf ("  %s\n",temp);
   fprintf(f,"%s \n",temp);
   if (!ParrentPID) {
    printf ("имя родителя не нашли\n\n");
    fprintf(f,"имя родителя не нашли\n\n");
   }
   else {
    printf ("Это родитель  %s\n\n", parrent);
    fprintf(f,"Это родитель:  %s\n\n", parrent);
   }
  }
  printf ("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n"); 
  fprintf(f,"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n");
  return true;
  
};


А с нахождениями идентификаторов ты уж сам резберись, посмотри структуру, которая используется, одно из её полей и есть идентификатор
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
09.01.2013, 10:18  [ТС] 7
Цитата Сообщение от kravam Посмотреть сообщение
список всех процессов и их родителей
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <stdio.h> 
#include <Windows.h> 
#include <Winnt.h> 
#include <tlhelp32.h>
#include <vector>
#include <string> 
using namespace std;
 
 
FILE *f;
 
//принимает:
//И вектор имён процессов
bool f_ima_parrent_process (HANDLE, vector<string>);
 
                                  //+
                                  //+
                                  //+
                                  //+
                                  //+
bool SpisokProcessov ()  {
 
 //ЭТо вектор для имён процессво
 vector<string> vec;
 
 HANDLE hProcessSnap;
 
 PROCESSENTRY32 pe32;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 
 
 
 //Ищем процессы
 Process32First(hProcessSnap, &pe32);
 vec.push_back (string(pe32.szExeFile));
 while (Process32Next(hProcessSnap, &pe32)) {
  vec.push_back (string(pe32.szExeFile));
 } 
 
 f_ima_parrent_process (hProcessSnap, vec);
 CloseHandle(hProcessSnap);
 return true;
}
                                  //+
                                  //+
                                  //+
                                  //+
                                  //+
 
int main () {
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 
 
 f = fopen("rezultat.txt","wb");
 
 
// while (1) 
  SpisokProcessov ();
 fclose (f);
 getchar ();
 return 0;
}
                                  //+
                                  //+
                                  //+
                                  //+
                                  //+
bool f_ima_parrent_process (HANDLE hProcessSnap, vector<string> vec) {
 
  PROCESSENTRY32 pe32;
  DWORD ParrentPID= 0;
  pe32.dwSize = sizeof(PROCESSENTRY32);
 
  for (int i= 0; i< (int)vec.size(); i++) {
   char temp    [MAX_PATH];
   strcpy(temp, vec[i].c_str());
   char parrent [MAX_PATH];
 
 
   //Сперва найдём PID родительского процесса
   Process32First(hProcessSnap, &pe32);
   if (!strcmp (temp, pe32.szExeFile)) {
    ParrentPID= pe32.th32ParentProcessID;
   }
   else {
    while (Process32Next(hProcessSnap, &pe32)) {
     if (!strcmp (temp, pe32.szExeFile)) {
      ParrentPID= pe32.th32ParentProcessID;
      break;
     }
    }
   }
 
 
   //Теперь его имя
   if (ParrentPID) {
    Process32First(hProcessSnap, &pe32);
    if (ParrentPID== pe32.th32ProcessID) {
     strcpy (parrent, pe32.szExeFile);
    }
    else {
     while (Process32Next(hProcessSnap, &pe32)) {
      if (ParrentPID== pe32.th32ProcessID) {
       strcpy (parrent, pe32.szExeFile);
       break;
      }
     }
    }
   }
  
   
   //Вывод
   printf ("  %s\n",temp);
   fprintf(f,"%s \n",temp);
   if (!ParrentPID) {
    printf ("имя родителя не нашли\n\n");
    fprintf(f,"имя родителя не нашли\n\n");
   }
   else {
    printf ("Это родитель  %s\n\n", parrent);
    fprintf(f,"Это родитель:  %s\n\n", parrent);
   }
  }
  printf ("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n"); 
  fprintf(f,"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n");
  return true;
  
};


А с нахождениями идентификаторов ты уж сам резберись, посмотри структуру, которая используется, одно из её полей и есть идентификатор
Спасибо, буду искать.
Только что накатал пример работы программы:
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
#include <iostream>
using namespace std;
#include "windows.h"
#include <conio.h>
#include <time.h>
 
const char days[] = {'00', '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', '\0'};
const char moths[] = {'00', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '\0'};
const char years[] = {'00', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009',
                      '2010', '2011', '2012', '2013', '\0'};
 
void GenerateDate(char *date[])
{
    srand((unsigned)time(NULL));
    *date[0] = days[rand()%31+1];
    *date[1] = moths[rand()%12+1];
    *date[2] = years[rand()%13+1];
}
 
int main(int argc, char *argv[])
{
    char *date[2];
    GenerateDate(date);
 
    cout << date[0] << " " << date[1] << " " << date[2] << endl;
    cout << "Test!";
    _getch();
}
В процессе выполнения орёт что выходит за границы массива, в функции GenerateDate строка *date[0] = days[rand()%31+1];, скорее всего с остальными двумя такая же ситуация. Не понимаю, ведь вроде за границы массива не выходит ничего, а пишет
Unhandled exception at 0x000d150d in master_v5.exe: 0xC0000005: Access violation writing location 0xcccccccc.
И ещё, как можно сделать передаваемые параметры в эту программу примерно так - "C:\program.exe -date 01 -month 01 -year 2001" ? гуглил и нашёл только про сами параметры, но про их названия ничего.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
09.01.2013, 11:06 8
Это что такое, объясни мне?
C++
1
'00'
0
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 795
09.01.2013, 13:06 9
Управление процессами
тут что-то очень похожее было...
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
10.01.2013, 05:48  [ТС] 10
Цитата Сообщение от kravam Посмотреть сообщение
Это что такое, объясни мне?
C++
1
'00'
Даже вспомнить не могу, зачем этот элемент)

Цитата Сообщение от WhiteP
Управление процессами
тут что-то очень похожее было...
Хмм, значит кто то ещё делает один из вариантов

Ребята, помогите сделать, как реализовать передачу параметров так например "C:\program.exe -date 01 -month 01 -year 2001" и как же из полученных дней выводить дни недели?

Добавлено через 10 часов 22 минуты
~up
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
10.01.2013, 06:01 11
Ну так прочти в учебнике главу "параметры командной строки" и всё.
Но надо быть последовательным всё же, разберись сперва с этим
C++
1
'00'
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
10.01.2013, 07:29  [ТС] 12
Цитата Сообщение от kravam Посмотреть сообщение
Ну так прочти в учебнике главу "параметры командной строки" и всё.
Но надо быть последовательным всё же, разберись сперва с этим
C++
1
'00'
Уже убрал.

Не понимаю, почему вылетает ошибка
Unhandled exception at 0x0109150d in master_v5.exe: 0xC0000005: Access violation writing location 0xcccccccc.
Может таким способом как я делать нельзя? Т.е. в один элемент символьного массива не может попасть число из двух цифр, а можно только одно?

Добавлено через 15 минут
Совсем забыл код приложить:
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
#include <iostream>
using namespace std;
#include "windows.h"
#include <conio.h>
#include <time.h>
 
const char days[] = {'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', '\0'};
const char moths[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '\0'};
const char years[] = {'2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009',
                      '2010', '2011', '2012', '2013', '\0'};
 
void GenerateDate(char *date[])
{
    srand((unsigned)time(NULL));
    *date[0] = days[rand()%31+1];
 
    srand((unsigned)time(NULL));
    *date[1] = moths[rand()%12+1];
 
    srand((unsigned)time(NULL));
    *date[2] = years[rand()%13+1];
}
 
int main(int argc, char *argv[])
{
    char *date[2];
    GenerateDate(date);
 
    cout << date[0] << " " << date[1] << " " << date[2] << endl;
    cout << "Test!";
    _getch();
}
Добавлено через 36 минут
Вобщем мой генератор не будет работать, решил просто вывести содержимое массива days - выводит только одну цифру, т.е. если в массиве идёт 10, выводит 1. И так со всм массивом. Как же тогда написать генератор даты?

Добавлено через 13 минут
Решил сделать по другому:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(int argc, char *argv[])
{
    int day, month, year;
    srand((unsigned)time(NULL));
    day = rand()%31+1;
    month = rand()%12+1;
    year = rand()%13+2000;
    cout << "Day - " << day << endl;
    cout << "Month - " << month << endl;
    cout << "Year - " << year << endl;
    cout << "\n";
    cout << "Generated day: " << day << "." << month << "." << year << endl;
    _getch();
}
А теперь вопрос, как передать эти параметры нашей второй программе?
CreateProcess("c:\\Master","c:\\Slave 24 12 2009", NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==TRUE)
Как засунуть целые числа в эту строку "c:\\Slave 24 12 2009" ? Так как ответа не знал, поэтому сначала решил делать через символьные массивы. Подскажите народ!
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
10.01.2013, 12:43 13
Цитата Сообщение от hvz- Посмотреть сообщение
Как засунуть целые числа в эту строку
параметры командной строки читай. Что ты прочёл, покажи мне?
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
10.01.2013, 13:48  [ТС] 14
Цитата Сообщение от kravam Посмотреть сообщение
параметры командной строки читай. Что ты прочёл, покажи мне?
Я открыл учебик от Ритчи и Кернигана и пытался найти что то про параметры - и ничего. Но мне интересует вот что - я сгенерировал 3 числа, т.е. 3 целочисленных переменных. Как эти переменные засунуть в чар строку в конец? Т.е. это строка будет иметь какую то запись(а именно - путь до программы) и в конце будут наши параметры.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
10.01.2013, 14:26 15
Фигня получается, я тебе говорю по
C++
1
'00'
ты мне про параметры командной строки.

Я думаю- чёрт с тобой давай про параметры, так опять же

Цитата Сообщение от hvz- Посмотреть сообщение
Но мне интересует вот что - я сгенерировал 3 числа, т.е. 3 целочисленных переменных. Как эти переменные засунуть в чар строку в конец? Т.е. это строка будет иметь какую то запись(а именно - путь до программы) и в конце будут наши параметры.
Так тебе что надо-то в конце-то концов?
Если ты часто-то решил, скажи "я решил", безо всяких "теперь мне надо"

Создавай новую тему если что-то надо.
Только грамотность-то подтяни безо всяких там чаров. Надо писать char. У кого-кого, а тебя вот это вот:
Цитата Сообщение от hvz- Посмотреть сообщение
Как эти переменные засунуть в чар строку в конец?
ребус тот ещё

++++++++++++++++++++++++++++++++++++++++++

И не брал ты в руки даже Kернигана и Ритчи, не ври. Там специальная глава есть "аргументы командной строки"

Короче ты пытаешься написать программу абсолютно не умея программировать. Начни с "Hello, word!" мой тебе совет.
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
10.01.2013, 16:01  [ТС] 16
Цитата Сообщение от kravam Посмотреть сообщение
И не брал ты в руки даже Kернигана и Ритчи, не ври. Там специальная глава есть "аргументы командной строки"
Извиняюсь, теперь нашёл. Слишком быстро бегло глазами по содержанию прошёлся.

Цитата Сообщение от kravam Посмотреть сообщение
Короче ты пытаешься написать программу абсолютно не умея программировать. Начни с "Hello, word!" мой тебе совет.
Недавно писал приложение на чистом винапи+си, не думаю что меня можно назвать ничего не знающим в этой области человеком. Просто я не со всем знаком, ещё не всё знаю. Поэтому обратился за помощью сюда. Прошу помочь с запихиванием целочисленных чисел в конец массива char, прилагаю исходник того что есть ещй раз, если кто то не увидел:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
#include "windows.h"
#include <conio.h>
#include <time.h>
 
int main(int argc, char *argv[])
{
    srand((unsigned)time(NULL));
    int day = rand()%31;
    int month = rand()%12;
    int year = rand()%13+2000;
    HANDLE hProcess = GetModuleHandle(NULL);
    cout << "Generated date: " << day << "." << month << "." << year << endl;
    cout << "Process handle: " << hProcess << endl;
    cout << "Press any key o continue..." << endl;
    _getch();
}
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
10.01.2013, 16:52 17
Цитата Сообщение от hvz- Посмотреть сообщение
Прошу помочь с запихиванием целочисленных чисел в конец массива char
cмысл? А впрочем, вот:
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
#include <stdio.h>
#include <string.h>
int main () {
 
 int x= 23;
 int y= 56;
 int z= 100;
 
 char array [20];
 
 char* temp= &array [sizeof(array)- sizeof(int)* 3];
 
 memcpy (temp, (char*)&x, sizeof(int));
 temp+=sizeof(int);
 memcpy (temp, (char*)&y, sizeof(int));
 temp+=sizeof(int);
 memcpy (temp, (char*)&y, sizeof(int));
 
 for (int i= 0; i< 20; i++ ) {
  printf ("%x ", (unsigned char)array [i]);
 }
 
 getchar ();
 return 0;
}
ещё что спросишь?
0
40 / 40 / 32
Регистрация: 24.11.2012
Сообщений: 200
10.01.2013, 17:01 18
Цитата Сообщение от kravam Посмотреть сообщение
Это что такое, объясни мне?
'00'
может чтобы первое число было на первом месте, а не на нулевом? ну и все остальные тоже чтобы были на своих местах
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14
12.01.2013, 20:26  [ТС] 19
Цитата Сообщение от kravam Посмотреть сообщение
cмысл? А впрочем, вот:
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
#include <stdio.h>
#include <string.h>
int main () {
 
 int x= 23;
 int y= 56;
 int z= 100;
 
 char array [20];
 
 char* temp= &array [sizeof(array)- sizeof(int)* 3];
 
 memcpy (temp, (char*)&x, sizeof(int));
 temp+=sizeof(int);
 memcpy (temp, (char*)&y, sizeof(int));
 temp+=sizeof(int);
 memcpy (temp, (char*)&y, sizeof(int));
 
 for (int i= 0; i< 20; i++ ) {
  printf ("%x ", (unsigned char)array [i]);
 }
 
 getchar ();
 return 0;
}
ещё что спросишь?
Не спрошу, ибо с sprintf() намного легче + ваш вариант не рабочий, выводил не то что нужно. (VS2010)

Цитата Сообщение от Agent Smith Посмотреть сообщение
может чтобы первое число было на первом месте, а не на нулевом? ну и все остальные тоже чтобы были на своих местах
Совершенно верно!

Но теперь возникла другая проблема - почему то не хочет принимать параметры. Прилагаю исходники:
Кликните здесь для просмотра всего текста
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
// MASTER
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include "windows.h"
 
void printColor(char* text, int color)
{
    HANDLE hConsole;
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, color);
    printf("%s",text);
    SetConsoleTextAttribute(hConsole, 7);
}
 
int main(int argc, char *argv[])
{
    // генерация даты: числа, месяца и года
    int day, month, year;
    srand((unsigned)time(NULL));
    day = rand()%31+1;
    month = rand()%12+1;
    year = rand()%13+2000;
 
    // выводим сгенерированную дату
    char master[] = "Master: ";
    char date[15];
    printColor(master, 5);
    printf("Generated date: ");
    sprintf(date, "%d %d %d \n", day, month, year);
    printColor(date, 9);
 
    // получаем идентификатор процесса master.exe
    unsigned short int procID = GetCurrentProcessId();
    char procID_c[15];
    printColor(master, 5);
    printf("master.exe Process ");
    sprintf(procID_c, "ID = %d \n", procID);
    printColor(procID_c, 9);
 
    // переменная пути с параметрами для запуска
    char path[50]; 
    
    // переводим целые числа в символы
    char day_c[3];
    _itoa(day, day_c, 10);
    char month_c[3];
    _itoa(month, month_c, 10);
    char year_c[5];
    _itoa(year, year_c, 10);
 
    // создаём строку для запуска slave.exe с параметрами
    sprintf(path, "slave.exe by_master %s %s %s %d", &day_c, &month_c, &year_c, procID); 
    
    printColor(master, 5);
    printf("Start slave.exe with this params: %s\n", path);
 
    // запускаем процесс slave.exe
    DWORD dwExitCode;
    STARTUPINFO cif;
    ZeroMemory(&cif,sizeof(STARTUPINFO));
    PROCESS_INFORMATION pi;
    if (CreateProcess(TEXT("slave.exe"), (LPWSTR)path, NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==TRUE) // если получилось, ждём пока не завершится процесс slave.exe
    {
        printColor(master, 5);
        printf("Process slave.exe ");
        printColor("created!\n", 2);
        if (WaitForSingleObject(pi.hProcess,INFINITE)!=WAIT_FAILED) // если процесс slave.exe не отвечает, завершаем процесс и выходим из программы
        {
            TerminateProcess(pi.hProcess, GetExitCodeProcess(pi.hProcess,&dwExitCode));
            printColor(master, 5);
            printf("Process slave.exe terminated. Press any key to exit...");
            _getch();
            return 0;
        }
    }
    else // если не получилось запустить процесс slave.exe, выходим из программы
    {
        printColor(master, 5);
        printf("Process slave.exe ");
        printColor("not created\n", 4);
        printColor(master, 5);
        printf("Press any key to exit...");
        _getch();
        return 0;
    }
}


Кликните здесь для просмотра всего текста
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
// SLAVE
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include "windows.h"
 
void printColor(char* text, int color)
{
    HANDLE hConsole;
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, color);
    printf("%s",text);
    SetConsoleTextAttribute(hConsole, 7);
}
 
 
int main(int argc, char *argv[])
{
    char slave[] = "Slave: ";
    unsigned short int day=0, month=0, year=0, procID=0;
    long int years_passed = 730500; // колличество дней с рождества христова по состоянию на 2000ый год
 
    // определяем, есть ли аргументы
    if(argc == 1)
    {
        printColor(slave, 11);
        printf("No input arguments! Press any key to exit...\n");
        _getch();
        return 0;
    }
    else if(argc > 1)
    {
        // определяем кем была запущена программа
        if(strcmp(argv[1], "by_master"))
        {
            printColor(slave, 11);
            printf("Slave launched by master.\n");
        }
        else
        {
            printColor(slave, 11);
            printf("Slave launched by itslef.\n");
        }
 
        // принимаем параметры
        day = atoi(argv[2]);
        month = atoi(argv[3]);
        year = atoi(argv[4]);
        procID = atoi(argv[5]);
    }
 
    printColor(slave, 11);
    printf("%d %d %d %d \n", day, month, year, procID);
    _getch();
    return 0;
}

Не могу понять в чём может быть проблема.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
13.01.2013, 04:26 20
Цитата Сообщение от hvz- Посмотреть сообщение
Не спрошу, ибо с sprintf() намного легче + ваш вариант не рабочий, выводил не то что нужно. (VS2010)
что именно?

Добавлено через 6 минут
Цитата Сообщение от Agent Smith Посмотреть сообщение
может чтобы первое число было на первом месте, а не на нулевом? ну и все остальные тоже чтобы были на своих местах
Тогда напиши первое на первое, второе на второе, а третье на третье. Предположим, нам нужны числа 23, 45, 67. Тогда пишем так:
C++
1
int x []= {123, 23, 45, 67};
вот и всё, все на свои местах. А вместо 123 ты можешь написать что угодно, поскольку это число стоит на нулевом месте, а нулевое тебе не нужно. А так писать и предполагать в этом здравый смысл:
C++
1
'00'
это неграмотность свою показывать.
0
13.01.2013, 04:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2013, 04:26
Помогаю со студенческими работами здесь

Как можно передать значение начальной даты и конечной даты из JS
Здравствуйте уважаемые! Нужна Ваша помощь, никак не могу разобраться. Есть .aspx страница где...

Получение размера, даты создания, даты последнего доступа файлов
Прошу помощи. С помощью каких фунций / процедур можно получить размер, дату создания, дату...

Выборка данных через сравнение даты в DataGridView и текущей даты
Ситуация такова: в датагриде есть столбец с определенной датой. Нужно сравнить все даты с этого...

Составить описание класса для представления даты. Разработать методы установки даты
Задание такое: Составить описание класса для представления даты. Разработать методы установки даты...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru