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

17.01.2009, 17:35
|
|
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме: 373690
Репутация:
88
|
|
MySQL HELP! Запись 0x00 байта
Записываю в MySQL базу из Си строку, запись идет до первого 0x00 байта, а дальше пустота... Можно-ли с этим боротся?
Последний раз редактировалось Smapt; 17.01.2009 в 17:39..
|
|
|

17.01.2009, 17:52
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Сообщение от Smapt
Записываю...
как?
|
|
|

17.01.2009, 17:55
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
0x00 - это ж конец строки
|
|
|

17.01.2009, 18:12
|
|
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме: 373690
Репутация:
88
|
|
Примерно так:
Код:
char text[] = {0x10,0x011,0x12,0x00,0x10,0x11};
MYSQL_RES * UPDATE = QUERY("base","UPDATE `user` SET text='%s' WHERE name='name'",text);
MYSQL_RES * QUERY(char * base, char * Format, ...)
{
va_list ap; // For arguments
va_start( ap, Format );
int buff_size = _vscprintf(Format,ap)+1;
char * buff = new char[buff_size];
vsprintf(buff,Format,ap);
char * queryPtr = new char[1024];
mysql_select_db(mysql,base);
sprintf(queryPtr,"use %s",base);
mysql_query(mysql,queryPtr);
sprintf(queryPtr, buff);
if (mysql_query(mysql,queryPtr))
{
va_end ( ap );
delete[] buff; delete[] queryPtr;
return 0;
}
else
{
va_end ( ap );
delete[] buff; delete[] queryPtr;
return mysql_store_result(mysql);
}
}
Сообщение от Joker-jar
0x00 - это ж конец строки
Спасибо, я знаю.
|
|
|

17.01.2009, 18:28
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Может у тебя конфликт типов данных? Т.е. ты передаешь hex-данные в текстовое поле...
|
|
|

17.01.2009, 18:33
|
|
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме: 373690
Репутация:
88
|
|
Передавать пробовал по все что только можно, char, blob и т.д. Результат всегда одинаковый записывает до 0x00 и обрезает строку. Если не ошибаюсь раньше в MySQL был тип данных binary , так вот в строку типа binary(100) данные записывались нормально(т.е. вместе с 0x00), а сечас bin почему-то убрали
|
|
|

17.01.2009, 18:35
|
|
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме: 7875940
Репутация:
2362
|
|
нуль байт запиши как char(0)
те запрос будет вида:
UPDATE `user` SET text=CONCAT('abc',char(0),'abc') WHERE name='name'
И поле text, наверно, должно иметь тип blob.
|
|
|

17.01.2009, 18:44
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
В таком случае, ты спрашиваешь примерно следующее: как записать конец строки в середину строки. Используй, к примеру, blob
|
|
|

17.01.2009, 20:40
|
|
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме: 373690
Репутация:
88
|
|
Всем спс, строка обрезалась ещё до отправки...
хм... возникает новый вопрос нельзяли без особого изврата отучить sprintf от "обрезания" ??
Последний раз редактировалось Smapt; 17.01.2009 в 20:51..
|
|
|

17.01.2009, 22:20
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Сообщение от Smapt
хм... возникает новый вопрос нельзяли без особого изврата отучить sprintf от "обрезания" ??
А обязательно sprintf() юзать? Можно заменить strcat() 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|