Как мне скопировать значение типа const unsigned char *? - PullRequest
2 голосов
/ 29 марта 2012

Я хочу сохранить некоторое значение из базы данных SQLite в моем буфере, но qlite3_column_text () имеет следующий прототип:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);

, тогда, когда я делаю:

out[size] = sqlite3_column_text(stmt, 0);

Iполучить следующее сообщение об ошибке:

assignment discards qualifiers from pointer target type

Я тоже пытался использовать strcpy(), но получаю то же сообщение об ошибке.

Ответы [ 3 ]

4 голосов
/ 29 марта 2012

Это просто с strdup;

out[size] = strdup((const char*)sqlite3_column_text(stmt, 0));

Обратите внимание, что это приведет к неправильному расположению копии, поэтому вам придется позже вызывать free () для указателя, чтобы не было утечки.

Конечно, это предполагает, что ваш массив out может хранить значения типа char *, вы не показываете, как он определен.

1 голос
/ 29 марта 2012

Вы пытаетесь присвоить unsigned char* типу без указателя.Вы должны сделать что-то вроде:

const unsigned char * out = sqlite3_column_text(stmt, 0);
printf(out);

Еще вопрос, что вы хотите делать с этими данными и временем жизни указателя.Примечание от sqlite.org"Возвращенные указатели действительны до тех пор, пока не произойдет преобразование типов, как описано выше, или до вызова sqlite3_step () или sqlite3_reset () или sqlite3_finalize ()."Итак, как уже говорили другие, вы можете выделить память и скопировать (strdup или malloc и strcpy).

1 голос
/ 29 марта 2012
// Should work?
#define BUF_SIZE 512
char buffer[BUF_SIZE];

strncpy( buffer, (const char*)sqlite3_column_text(stmt, 0), BUF_SIZE);
buffer[BUF_size-1] = '\0';
...