2012-03-29 5 views
1

어떻게하면됩니까? 내 버퍼에 SQLite는 데이터베이스에서 일부 값을 저장할하지만 qlite3_column_text()는 다음과 같은 프로토 타입이 있습니다 : 내가 할 때 다음unsigned char * 유형의 값을 복사하는 방법은 무엇입니까?

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

을 :

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

나는 다음과 같은 오류 메시지가 :

assignment discards qualifiers from pointer target type 

strcpy()을 사용해도 시도했지만 동일한 오류 메시지가 표시됩니다.

도움이 매우 감사합니다. 미리 감사드립니다.

답변

3

strdup에 쉽게;

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

이렇게하면 복사본이 malloc되므로 나중에 포인터가 누출되지 않도록 free()를 호출해야합니다.

물론 이것은 out 어레이가 char * 유형의 값을 저장할 수 있다고 가정합니다. 사용자 정의 유형이 표시되지 않습니다.

+0

그것은 나를 위해 작동하지 않습니다. sqlite3_column_text (stmt, 0));'호환되지 않는 포인터 유형'out' 변수에서'할당은'char **'유형을 갖습니다. – Jack

+0

@Jack # # 을 포함 했습니까? –

+0

요아킴 이삭손 : 네. 나는 그것을했다. – Jack

1
// 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'; 
+0

하지만'sqlite3_column_text()'에서 반환 된 모든 문자열을 복사하려고하는데 길이가 없습니다. 그렇다면'strncpy()'함수의'n' 매개 변수를 어떻게 설정합니까? – Jack

+0

길이를 알기 위해 다음 호출을 사용할 수 있습니다. int len ​​= sqlite3_column_bytes (stmt, 0); – Genar

1

unsigned char*을 포인터가 아닌 유형으로 지정하려고합니다. 더 큰 문제는이 데이터와 포인터의 수명에 대해 수행 할 것입니다

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

: 당신은 뭔가를해야한다. 참고에서 sqlite.org "반환 된 포인터는 위에서 설명한대로 형식 변환이 발생할 때까지 또는 sqlite3_step() 또는 sqlite3_reset() 또는 sqlite3_finalize()가 호출 될 때까지 유효합니다." 그래서 다른 사람들이 말했듯이, 메모리와 복사 (strdup 또는 mallocstrcpy)를 할당 할 수 있습니다.

관련 문제