使用SQLite3 資料庫
把從資料庫取得的內容顯示到串列時出現讀取錯誤,有沒有大神能幫忙看看
void CDbBase::GetColumnText(sqlite3_stmt* hst, char* text, int nCol) {
char* dest = new char [1000];
const unsigned char* src = sqlite3_column_text(hst, nCol); // カラム行からテキスト取得
if (src == NULL) {
text[0] = '\0';
}
else{
UTF8ToShiftJIS((const char *)src, dest); // ShiftJis変換
int len = strlen(dest) + 1; // 長さ取得
sprintf_s(text, len, _T("%s"), ""); // 初期化
_tcscpy_s(text, len, dest); // charにキャスト
delete[] dest;
}
return;
}
BOOL UTF8ToShiftJIS(const char* src, char* dest)
{
// UTF-8からUnicodeに変換した場合の長さを求める。
int iWideLength = ::MultiByteToWideChar(CP_UTF8, 0, src, strlen(src), NULL, 0);
if (iWideLength == 0) return FALSE;
LPWSTR lpWideString = new WCHAR[iWideLength];
int iLength = 0;
if (// UTF-8からUnicodeに変換する。
(::MultiByteToWideChar(CP_UTF8, 0, src, strlen(src), lpWideString, iWideLength) == 0)
// UnicodeからShift_JISに変換した場合の長さを求める。
|| ((iLength = ::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, NULL, 0, NULL, NULL)) == 0)
// UnicodeからShift_JISに変換する。
|| (::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, dest, iLength, NULL, NULL) == 0)) {
// 変換に失敗
delete lpWideString;
return FALSE;
}

uj5u.com熱心網友回復:
沒準欄位內容為NULLuj5u.com熱心網友回復:
截圖里面的意思是sqlite3_column_text這個函式執行出錯嗎?那這樣和編碼轉換函式沒什么關系啊。另外,為什么要定義dest變數呢,如果text在外部函式中已經分配了記憶體,直接把text轉給UTF8ToShiftJIS函式即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265682.html
標籤:C++ 語言
上一篇:C開發分類
