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

26.04.2009, 15:04
|
|
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
Люди подскажите как создать функцию которая примет структуру и вернет массив заполненый элементами из структуры. И как потом к этому массиву обращаться из мэйн. Че то сам писал писал так ничо и не получается. Желательно примерчик простенький.
На си)
А погуглить?
http://www.java2s.com/Tutorial/Cpp/0160__Structure/Passstructuretoafunctionasapointer.htm
|
|
|

26.04.2009, 15:38
|
|
Новичок
Регистрация: 16.03.2009
Сообщений: 5
Провел на форуме: 11620
Репутация:
0
|
|
Ругается на директиву.
При компиляции выходит сообщение об ошибке по директиве #include<.h>:
1)"Ожидается диретива предпроцессору (CS 1024)" 2)"Ожидается однострочный комментарий или признак конца строки (CS 1025)"
А вот и код:
Код:
#include <stdio.h>
#include <stdlib.h>
namespace az
{
class Program
{
int main()
{
char *Remote_IP = getenv("REMOTE_ADDR"); char *Query_String = getenv("QUERY_STRING");
printf("Content-type: text/html\n\n");
printf("<html><body><h1>Привет</h1><p>"); printf("Ваш IP: %s", Remote_IP);
printf("<p>Переданные вами параметры: %s", Query_String);
printf("</body></html>")
return 0;
}
}
}
Как от это исправить?
|
|
|

26.04.2009, 15:51
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
ппц что это ты нагородил, выкинь этот говнокод и почитай книжки.
|
|
|

26.04.2009, 16:39
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
Сообщение от KaZ@NoVa
ss88,Не люблю копаться в чужих кодах.... Давай на словах. Имеется в виду, что надо сосканировать предложение, разбить на слова и... а дальше чо? "Заностится в бинарно дерево" по какому принципу? Если просто слова по-порядку, то просто забить слова в структуру (массив), а дальше их печатать в виде дерева (всмысле в каждой строке увеличиваем колличество распечатываемых слов в 2 раза). В этом коде слишком муторно разбираться...
Судя по тем кодам, что пишут в этой теме, мой код, действительно, совсем другой, не сказал бы, что он плохой... Слова добавлялись в дерево, вполне логично, по сравнению строк на больше/меньше. Никаких стеков, массивов нельзя - это глупо, да и на это стоит ограничение, просто, в данном случае, память является самым критичным ресурсом, поэтому разрастание стека при рекурсии - недопустимая роскошь. Привожу код с нерекурсивным обходом (не самый эллегантный алгоритм, но все же...), может кому пригодится, потому что задача не самая тривиальная... Если кто захочет компилить, то это делать надо в 99-м стандарте С.
Код:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tree_item_tag {
const char * word;
size_t count;
struct tree_item_tag *left, *right, *parent;
} tree_item_t;
void insert(tree_item_t** first_item, const char* keyword, size_t * count) {
tree_item_t** pcur = first_item, **prev = first_item;
int cmp_words;
while (*pcur != NULL) { /* searching for already inserted word inc count */
if((cmp_words=strcmp(keyword, (*pcur)->word)) == 0) {
++(*pcur)->count;
return;
}
prev = pcur;
pcur=(cmp_words<0) ? &((*pcur)->left) : &((*pcur)->right);
} /* it is the first insert of this word */
*pcur = malloc( sizeof(tree_item_t) );
(*pcur)->word = strcpy( malloc( strlen(keyword) + 1) , keyword);
(*pcur)->count = 1;
(*pcur)->parent = *prev;
(*pcur)->left = (*pcur)->right = NULL;
++(*count);
}
void printnotrec(tree_item_t* tree_item, size_t count) {
size_t cur_count = 0;
tree_item_t * pcur = tree_item, * pprev = pcur, *tmppcur;
while(cur_count != count) {
tmppcur = pcur;
if( (pcur->left==NULL && pprev!=pcur->right)
||pprev==pcur->left) {
(void)printf("%s %d\n",pcur->word, pcur->count);
++cur_count;
if( pcur->right == NULL ) {
if( pcur->parent->right == pcur ) {
pprev = pcur->parent;
pcur = pcur->parent->parent;
continue;
} else
pcur = pcur->parent;
} else
pcur = pcur->right;
}
else {
if(pprev == pcur->right)
pcur = pcur->parent;
else
pcur = pcur->left;
}
pprev = tmppcur;
}
}
int get_word(char * buf_word, size_t buf_size) {
int c; /* current read symbol */
size_t word_len = 0;
while( (c=getchar()) != EOF) {
if(isalpha( (unsigned char) c) || (word_len > 0 && c == '\'')) {
buf_word[ word_len++ ] = (unsigned char) tolower(c);
if(word_len + 1 == buf_size) break; /* return only part of word */
} else if(word_len > 0) break; /* word can be returned */
}
if(word_len > 0) {
buf_word[ word_len ]= '\0';
return 1;
} else return 0;
}
int main(void) {
tree_item_t *first_item = NULL;
size_t buf_size = 50; /* must be bigger than 1 */
size_t count = 0;
char * buf_word = malloc(buf_size);
while(get_word(buf_word, buf_size))
insert(&first_item, buf_word,&count);
printnotrec(first_item,count);
printf("%d\n",count);
return EXIT_SUCCESS;
}
Последний раз редактировалось ss88; 26.04.2009 в 18:07..
|
|
|

26.04.2009, 17:07
|
|
Познающий
Регистрация: 17.01.2007
Сообщений: 94
Провел на форуме: 528220
Репутация:
65
|
|
Сообщение от Kaimi
А погуглить?
http://www.java2s.com/Tutorial/Cpp/0160__Structure/Passstructuretoafunctionasapointer.htm
Спасибо за наводку, структуру передал, а как теперь вернуть массив?
|
|
|

26.04.2009, 17:50
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
Спасибо за наводку, структуру передал, а как теперь вернуть массив?
создай в куче и возвращай указатель на него.
|
|
|

26.04.2009, 18:33
|
|
Познающий
Регистрация: 17.01.2007
Сообщений: 94
Провел на форуме: 528220
Репутация:
65
|
|
Может я что то не так делаю, вот мой код может кто нить подскажет что не так?
PHP код:
#include <stdio.h>
#include <time.h>
struct tm intime; // создаю структуру типа tm которая описана в time.h
int* funct(struct tm *p); // обьявление функции
int* funct(struct tm *p) // описание
{
int temp[7]; // создаем массив который вернется
temp[0] = p.tm_sec; // присваиваем элементам массива, значения структуры
temp[1] = p.tm_min; // ..
temp[2] = p.tm_hour;
temp[3] = p.tm_mday;
temp[4] = p.tm_mon;
temp[5] = p.tm_year;
temp[6] = '\0'; // закрываем массив
return temp; // возвращаем массив
}
int main (void)
{
int *temp2; // создаем указатель на массив который получим из функции
{
intime.tm_sec=10; // присваиваем значения элементам нашей входной структуры
intime.tm_min=19;
intime.tm_hour=20;
intime.tm_mday=14;
intime.tm_mon=5;
intime.tm_year=109;
}
temp2 = funct(&intime); // пытаемся отправить структуру в функцию и ничего не выходит ((
return 0;
}
Compiling source file(s)...
gps.cpp
gps.cpp: In function `int* funct(tm*)':
gps.cpp:9: error: `tm_sec' has not been declared // здесь непонимаю почему ругается, ведь мы обьявили структуру в файле <time.h>
gps.cpp:9: error: request for member of non-aggregate type before ';' token
gps.cpp:10: error: `tm_min' has not been declared
gps.cpp:10: error: request for member of non-aggregate type before ';' token
gps.cpp:11: error: `tm_hour' has not been declared
gps.cpp:8: warning: address of local variable `temp' returned // здесь вроде ругается что возвращаем локальную а не глобальную переменную
|
|
|

26.04.2009, 18:41
|
|
Познающий
Регистрация: 08.08.2008
Сообщений: 55
Провел на форуме: 369629
Репутация:
54
|
|
Код:
temp[0] = p->tm_sec; // присваиваем элементам массива, значения структуры
temp[1] = p->tm_min; // ..
temp[2] = p->tm_hour;
temp[3] = p->tm_mday;
...
насчет переменной локальной - она создается в стеке, а стек это такайа штука, которая после выхода из подпрограммы может быть использована другой подпрограммой - следовательно и данные будут испорчены.
Последний раз редактировалось FrMn; 26.04.2009 в 18:45..
|
|
|

26.04.2009, 19:09
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
Сообщение от CHIP:))
Может я что то не так делаю, вот мой код может кто нить подскажет что не так?
не знаю, сколько вам лет, но я ТАКОГО даже в школе не писал ))) Вас самих не пугает ТАКОЕ??? "Сколько не делай из говна конфету, получается либо слдкое говно, либо говняная конфета" (с) Я
|
|
|

26.04.2009, 19:41
|
|
Познающий
Регистрация: 17.01.2007
Сообщений: 94
Провел на форуме: 528220
Репутация:
65
|
|
Меня ТАКОЕ не пугает, просто потому что я неопытен в этой сфере. Если несложно можешь обьяснить конкретно что именно тебя так пугает в этом коде?
Я учту это на будущее. Мне 21)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|