我從這里運行 sqlite 的代碼示例以在 C 中創建一個表,這里是代碼:
#include "../contrib/sqlite/sqlite3.h"
static int callback(void* NotUsed, int argc, char** argv, char** azColName) {
int i;
for (i = 0; i < argc; i ) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char* argv[]) {
sqlite3* db;
char* zErrMsg = 0;
int rc;
char* sql;
/* Open database */
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(0);
}
else {
fprintf(stdout, "Opened database successfully\n");
}
/* Create SQL statement */
sql = "CREATE TABLE COMPANY(" \ // Error is here at the '='
"ID INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"ADDRESS CHAR(50)," \
"SALARY REAL );";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
else {
fprintf(stdout, "Table created successfully\n");
}
sqlite3_close(db);
return 0;
}
但是后來我從 Visual Studio 2022 收到了一些錯誤,上面寫著:
“const char *”型別的值不能分配給“char *”型別的物體
'=': 無法從 'const char [164]' 轉換為 'char *'
有誰知道如何解決這個錯誤?
uj5u.com熱心網友回復:
問題是你的sql變數。它是一個char*指標,它是一個指向非常量字符資料的指標。但是您試圖將其分配給指向字串文字,這是 const 字符資料(在本例中為const char[164]陣列)。分配一個非 const 字符指標指向 const 字符資料是危險的,因為它允許只讀字串是可變的,這是未定義的行為。在 C(您正在查看的示例是為它撰寫的)和舊版本的 C 中,這樣的分配是合法的(盡管不推薦),但在 C 11 之后是非法的。
您需要更改 to 的宣告sql(無論如何const char*,這是所sqlite3_exec()期望的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422601.html
標籤:
