我正在嘗試用 C 為學校撰寫一個帶有簡單登錄界面的程式。我是新手,還在學習,但是下面的代碼片段出現了一個奇怪的錯誤。在回圈內部,它按預期輸出用戶名、密碼和名稱,但如果我稍后嘗試訪問該陣列,它會輸出亂碼。非常感謝您對此的任何幫助:
編輯:謝謝大家!您的建議有助于解決問題。我需要使用strdup,它不是標準的c函式,但很容易實作,只需運行google搜索即可!
sql = "SELECT username,password,real_name from Users";
const unsigned char* usernames[20]; // 20 max usernames
const unsigned char* passwords[20];
const unsigned char* names[20];
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); //sqlite3_exec(db, sql, callback, usernames, &zErrMsg);
if( rc != SQLITE_OK ) {
printf("error: %s ", sqlite3_errmsg(db));
return 1;
}
int i = 0;
while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
usernames[i]= sqlite3_column_text (stmt, 0);
passwords[i] = sqlite3_column_text(stmt, 1);
names[i] = sqlite3_column_text(stmt, 2);
//Prints fine
cout << usernames[i] << ":" << passwords[i] << ":" << names[i] << "\n";
i = i 1 ;
}
//Prints gibberish
cout << usernames[0];
uj5u.com熱心網友回復:
根據檔案:
回傳的指標是有效的[...] 直到
sqlite3_step()or被呼叫。sqlite3_reset()sqlite3_finalize()
由于您正在呼叫sqlite3_step每次迭代,因此您保存到陣列中的指標在之后立即變得無效。
解決方案
要么手動呼叫malloc并strcpy實際存盤結果,要么簡單地將它們保存到std::strings.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/532955.html
標籤:C 数组指针字符
上一篇:迭代后如何檢查兩個陣列是否相等
