错误:使用类型“ double”初始化类型“ char *”时类型不兼容

时间:2019-03-27 19:28:28

标签: sql c sqlite char

下午好, 我的代码如下:

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 个答案:

答案 0 :(得分:2)

您似乎正在尝试构建字符串。为此,您可以使用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库,因此您应该改用正确的方法来准备一条语句并 bind 绑定到该语句,而不是自己将这些值插入字符串中。