Вопрос:

ошибка: несовместимые типы при инициализации типа 'char *' с использованием типа 'double'

c++ sql c sqlite char

21 просмотра

1 ответ

1 Репутация автора

Добрый день, у меня есть этот код ниже:

double bd_sacar_imc(double altura, double peso) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;

char *sql = ("SELECT %lf/(%lf * %lf);", peso, altura, altura);

rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

if (rc != SQLITE_OK) {
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
    return 0;
} else {
    fprintf(stdout, "Consulta creada con exito\n");
    return peso / (altura * altura);
}};

Тем не менее, я получаю эту ошибку:

..\BD\bd.c:170:14: error: incompatible types when initializing type 'char *' using type 'double' char *sql = ("SELECT %lf /( %lf * %lf);", peso, altura, altura);

Что может происходить?

Автор: Busto Источник Размещён: 27.03.2019 07:28

Ответы (1)


0 плюса

43773 Репутация автора

Похоже, вы пытаетесь построить строку. Для этого вы можете использовать snprintf.

char sql[64];
int size = snprintf(sql, 64, "SELECT %lf/(%lf * %lf);", peso, altura, altura);

Обратите внимание, что я сохранил возвращаемое значение. Это необходимо для обработки любой будущей ошибки, когда вы изменяете оператор таким образом, что это может привести к переполнению буфера. Вероятно, вы можете просто справиться с этим, используя утверждение отладки, так как эта строка предварительно заданного размера должна быть достаточно большой, чтобы содержать намеченный SQL.

if (size >= 64) {
    assert(0);
    return 0;
}

Однако, поскольку вы используете библиотеку sqlite, вам следует вместо этого использовать надлежащие методы для привязки значений к шаблону, а не вставлять значения в строку самостоятельно.

Автор: paddy Размещён: 27.03.2019 07:40
Вопросы из категории :
32x32