Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
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
|
|
|