ошибка: несовместимые типы при инициализации типа 'char *' с использованием типа 'double' - PullRequest
0 голосов
/ 27 марта 2019

Добрый день, у меня есть следующий код:

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);

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

1 Ответ

2 голосов
/ 27 марта 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...