ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

20.12.2007, 20:57
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
1204
|
|
ААААА, кез, чмокаю тя в носик!!! Выручил.
Я почему-то когда делал __declspec(dllexport) void* operator new(size_t size) компилятор ругался..
|
|
|

20.12.2007, 21:11
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
|
|
|

20.12.2007, 21:16
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
1204
|
|
Эммм, ну __declspec(dllexport) void* operator new(size_t size, DWORD pim, DWORD piu) вполне прокатило и даже работало =)
|
|
|

20.12.2007, 22:40
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
>>Как можно экспортировать оператор?
ну в конечном счете любой перегруженный оператор является функцией, другое дело что не совсем очевидно какое имя будет генерировать компилятор при экспорте..
|
|
|

23.12.2007, 19:26
|
|
Новичок
Регистрация: 17.08.2007
Сообщений: 14
Провел на форуме: 56759
Репутация:
16
|
|
с клавы вводиться предложение. Надо в нем найти определенное слово и заменить его другим. как?
|
|
|

26.12.2007, 01:42
|
|
Участник форума
Регистрация: 02.04.2006
Сообщений: 273
Провел на форуме: 1269624
Репутация:
114
|
|
Народ помогите разобраться с этим кодом уже 2 часа с ним парюсь. (всякая ненужная фигня вырезанна)
Код:
int main(int argc, char* argv[])
{
char com[80];
while(1)
{
cout<<"# ";
gets(com);
int iret=command(com);
if (iret==2) break;
cout<<"\n\n";
}
return 0;
}
int command(char *s)
{
char * pch;
pch = strtok (s," ");
while (pch != NULL)
{
if(!strcmp("-add",pch))
{
pch = strtok (NULL, " ");
if (pch)
{
if (!strcmp("s",pch))
{
pch = strtok (NULL, " ");
add_stud(pch);
break;
}
}
cout<<"To get help about command put -help add";
return 1;
}
if(!strcmp("-exit",pch) || !strcmp("-quit",pch))
{
cout<<"Good Buy\n";
return 2;
}
pch = strtok (NULL, " ");
}
cout<<"Command is not supported! Put -help to get Help";
return 0;
}
int add_stud(char *n)
{
char t[80];
int i5Valu[5];
cout<<"EnterFIO\n";
cin>>t;
cout<<"Enter 5 Values\n";
return 1;
}
дело в том что если мы вводим
Вместо 1 может быть что угодно суть не в этом.
То на экране появляется запрос на ввод FIO
НО когда мы вводим фио и нажимаем ентер то у нас появляются 2 лишние строки с сообщением
Код:
Command is not supported! Put -help to get Help
Откуда????? они там берутся не как немогу догнать.
Вот что выводиться на экран.
Код:
# -add s 1
EnterFIO
asdsad
Enter 5 Values
Command is not supported! Put -help to get Help
# Command is not supported! Put -help to get Help
#
|
|
|

26.12.2007, 13:06
|
|
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме: 1777536
Репутация:
932
|
|
In fuction int command(char *s) :
Код:
while (pch != NULL)
{
...................................
if (!strcmp("s",pch))
{
pch = strtok (NULL, " ");
add_stud(pch);
break;
....................................
}
Обрати внимание на break; , он делает выход из твоего цикла while (pch != NULL), а в конце цикла что?
Код:
cout<<"Command is not supported! Put -help to get Help";
return 0;
Сделай вместо break return -1 и всё вроде должно быть норм. 
|
|
|

27.12.2007, 08:43
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Сообщение от iv.
ПС: перегружать с тем же набором параметров мешает то, что эти операторы у меня сидят в dll и при экспорте компилятор ругается. =\
В общем-то, набор параметров на самом деле особого значения не имеет.
Нельзя менять число аргументов при перегрузке оператора.
Сообщение от ZaCo
>>Как можно экспортировать оператор?
ну в конечном счете любой перегруженный оператор является функцией, другое дело что не совсем очевидно какое имя будет генерировать компилятор при экспорте..
Скажу сразу - очень извратное 
Последний раз редактировалось _Great_; 27.12.2007 в 08:47..
|
|
|

27.12.2007, 23:56
|
|
Познающий
Регистрация: 18.12.2007
Сообщений: 32
Провел на форуме: 614948
Репутация:
86
|
|
Сейчас на С перехожу. Написал самое простое что есть- Стек написал (не думайте что я в алгоритмах не шарю, кучи Фибоначчи, 3х связные списки и т.д. потом) посмотрите на сами указатели, просто думаю a- массив, int *p=a -коряво или нет?
Код:
#include <stdio.h>
#include <stdlib.h>
void Add(int *a[], int *kol, int el);
int Del(int *a[], int *kol);
void Display(int *a[], int *kol);
void Add(int *a[], int *kol, int el)
{
int *p=a;
++(*kol);
*(p+*kol)=el;
}
int Del(int *a[], int *kol)
{
if (*kol<=-1) return 0;
int *p=a;
--(*kol);
*(p+*kol+1)=0;
return 1;
}
void Display(int *a[], int *kol)
{
printf("stack:");
int i;
for (i=0; i<=*kol; ++i) {
printf("%i,", a[i]);
}
printf("\n");
}
int main(int argc, char *argv[])
{
int a[100], el=0, kol=-1,i;
int *p=a;
while (1) {
printf("1:add, -1:del, 0:exit. command=");
scanf("%i",&i);
if (i==0) break;
if (i==1) {
printf("ELEMENT=");
scanf("%i",&el);
Add(a,&kol,el);
}
if (i==-1)
if (!Del(a,&kol)) exit(1);
Display(a,&kol);
}
return 0;
}
|
|
|

29.12.2007, 13:03
|
|
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
Провел на форуме: 13936387
Репутация:
1844
|
|
Сообщение от Neovild
Сейчас на С перехожу. Написал самое простое что есть- Стек написал (не думайте что я в алгоритмах не шарю, кучи Фибоначчи, 3х связные списки и т.д. потом) посмотрите на сами указатели, просто думаю a- массив, int *p=a -коряво или нет?
Код:
#include <stdio.h>
#include <stdlib.h>
void Add(int *a[], int *kol, int el);
int Del(int *a[], int *kol);
void Display(int *a[], int *kol);
void Add(int *a[], int *kol, int el)
{
int *p=a;
++(*kol);
*(p+*kol)=el;
}
int Del(int *a[], int *kol)
{
if (*kol<=-1) return 0;
int *p=a;
--(*kol);
*(p+*kol+1)=0;
return 1;
}
void Display(int *a[], int *kol)
{
printf("stack:");
int i;
for (i=0; i<=*kol; ++i) {
printf("%i,", a[i]);
}
printf("\n");
}
int main(int argc, char *argv[])
{
int a[100], el=0, kol=-1,i;
int *p=a;
while (1) {
printf("1:add, -1:del, 0:exit. command=");
scanf("%i",&i);
if (i==0) break;
if (i==1) {
printf("ELEMENT=");
scanf("%i",&el);
Add(a,&kol,el);
}
if (i==-1)
if (!Del(a,&kol)) exit(1);
Display(a,&kol);
}
return 0;
}
Честно сказать, не в обиду конечно, но это самый тупой пример работы с указателями который я когда либо видел в жизни, нах... Кучи переменных, которые ты туда сюда тусуешь. Зачем заводить два указателя на один и тот же массив? Под настроение?
Последний раз редактировалось dinar_007; 29.12.2007 в 13:07..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|