下午好, 我的代码如下:
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);
可能会发生什么?
答案 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 绑定到该语句,而不是自己将这些值插入字符串中。