информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Сетевые кракеры и правда о деле ЛевинаПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
inside 08.11.03 18:15  Число просмотров: 1307
Автор: Eugene Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> malloc только под query?
> И зачем, поясни пожалуйста.

под все текстовые данные. да и не только текстовые. под все, что не вмещается в sizeof(unsigned) ;-)

надо отвыкать от паскалевских приемов. в си - char *query
говорит о том, что query - указатель на строку. другими словами - unisigned long значение, которое содержит адрес первого символа строки (char говорит о том, что эта строка состоит из символов, если б там было, например, unsigned long * - тогда при обращении к N-ому символу массива query[N] ты попадал бы не на N байт, а на N*4, так как sizeof(unsigned) == 4 вроде был).

если ты хочешь, что б query указывал на нужную тебе строку - выдели под нее память. маллок выделяет память из кучи и возвращяет тебе адрес участка, который и нужно присвоить указателю.

query = (char *)malloc(STRING_SIZE);

snprintf(query,STRING_SIZE,"%s - format string",your_data);

[ int snprintf(char *str, size_t size, const char *format, ...);

The functions snprintf and vsnprintf do not write more than
size bytes (including the trailing '\0'). If the output was truncated
due to this limit then the return value is the number of characters
(not including the trailing '\0') which would have been written to the
final string if enough space had been available. Thus, a return value
of size or more means that the output was truncated. (See also below
under NOTES.) If an output error is encountered, a negative value is
returned.

]

следи, что б переполнения буфера небыло, ведь неизвестно, что находится за выделенным фрагментом. данные других программ ты не повредишь (режим-то защищенный), а вот свои можешь затереть, если выйдешь за буфер.

в общем случае - делай man function_name
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach