Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Программные интерфейсы общего назначения > Прикладные библиотеки и технологии > Библиотека менеджера QDB > Справочник по клиентскому API менеджера QDB > qdb_mprintf()



qdb_mprintf()

Печать форматированной информации в новую строку

Прототип:

#include <qdb/qdb.h>
char * qdb_mprintf( const char *format,
... );

Аргументы:

format
Формат обрабатываемой информации, во многом аналогичный printf().
...
Дополнительные параметры для печати.

Библиотека:

qdb

Описание:

Данная функция является вариацией вызова sprintf(). Результирующая строка выделяется с помощью malloc(), что исключает переполнение. Кроме того, она поддерживает дополнительные параметры, полезные для создания SQL запросов.


Note: Функция qdb_statement() также позволяет выполнять форматированный вывод, но не требует обязательного освобождения возвращенной строки. Однако, qdb_mprintf() может быть полезен при формировании многострочных запросов.

Возвращённая строка должна быть освобождена с помощью free() в обязательном порядке после использования.

Поддерживаются все стандартные форматы printf(). Дополнительный формат "%q" во многом аналогичен "%s", но удваивает каждый символ ' (каждую одинарную кавычку). Этот формат спроектирован для использования внутри строкового литерала. Удваивая каждую конструкцию ', он экранирует этот символ и позволяет вставить его в строку.

Допустим, имеется некоторая строка:

char *zText = "It's a happy day!";

В SQL запросе она может быть использована как:

qdb_mprintf( db, "INSERT INTO table VALUES('%q');", zText );

Результирующая строка будет иметь вид:

INSERT INTO table VALUES('It''s a happy day!');

Это корректная конструкция, поскольку при использовании "%s" получился бы SQL запрос с синтаксической ошибкой:

INSERT INTO table VALUES('It's a happy day!');

Как правило в строковых литералах всегда следует использовать "%q" вместо "%s".

Формат "%Q" аналогичен "%q", за исключением того, что она обрамляет всю строку в одинарные кавычки. Также каждый параметр, являющийся указателем на NULL, заменяется текстом "NULL" (без одинарных кавычек):

char *zSQL = sqlite3_mprintf( "INSERT INTO table VALUES(%Q);", zText );
sqlite3_exec( db, zSQL, 0, 0, 0 );
sqlite3_free( zSQL );

Приведённый выше код отобразит правильный SQL запрос в переменную zSQL, даже если переменная zText есть NULL.


Note: Функция является псевдонимом для sqlite3_mprintf().

Возвращаемое значение:

Указатель на строку
Успешное завершение.
NULL
Возникла ошибка. Код ошибки записан в errno.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

qdb_snprintf(), qdb_vmprintf(), printf()




Предыдущий раздел: перейти