2014-11-19 2 views
0

내 Swift 코드에서 나는 char** 결과를 반환하는 C 메소드를 호출합니다. 어떻게하면 억지로 응급 처치 할 수 있습니까? [String]을 처리 할 수 ​​있습니까?액세스 char ** 결과 from Swift

+0

일반적으로 C에서 ** null로 끝나는 **'char *'변수는 _string_을 나타낼 수 있습니다. 조금 자세하게 설명해 줄 수 있니? 힌트 :'char ** p'와'* p [i]' –

+0

'char **'를'[String]'으로 변환하는 것이 더 합리적 일 것입니다. 그러나 더 많은 정보가 필요합니다. 각'char *'는 0으로 끝나는가? 'char **'는 NULL로 끝나는가? 누가 메모리를 할당하고 누가 메모리를 해제 할 책임이 있습니까? 문자열이 일정합니까 또는 Swift에서 문자열을 수정 하시겠습니까? –

+0

@ Martin R : 물론 [String]입니다. 나는 그 문제를 바로 잡았다. 내 대답도 참조하십시오. –

답변

0

감사합니다 ;-) 내가 관리 행운 그것이

let c1 = String.fromCString(row.memory) 
let c2 = String.fromCString(row.advancedBy(1).memory) 

row 작업을 얻을 처리 할 수있는 방법의 예입니다 실제로 내 char** 배열입니다. C에서 가져 왔습니다. 사실 MySQL과 통신하기 때문에 MYSQL_ROW입니다.

+0

NUL 종료 UTF-8 문자열이 있다고 가정합니다. 나는 MySQL 전문가가 아니지만, 문서에 따르면 MYSQL_ROW에는 계산 된 바이트 배열에 대한 포인터가 들어 있습니다. 이것들은 필연적으로 NUL로 종료됩니까? –

+0

예제로 시도해 보았습니다. IF (와 나는 추측한다) MySQL 녀석은 좋은 일을했다. 그 문자열은 다른 것 이외에 NUL- 종료되어야한다. 이것이 내가 강력한 프로그래밍이라고 부르는 것입니다. –

-1

char **을 처리하려는 경우 포인터에 대한 포인터를 처리하고 있음을 의미합니다. Sourav Ghosh가 말했듯이 C 언어에는 문자열 데이터 유형이 올바르지 않습니다. 대신 문자에 대한 포인터 또는 char *을 선언해야합니다. 단일 문자 (1 바이트) 또는 그 배열을 가질 수있는 메모리 주소를 가리키고 있음을 의미합니다. 여기

은 당신이

char *myString; 

myString = &swift(); 
printf("My string is %s", myString); 

신속한 답변을

+0

나는 Swift를 모른다. 그러나 OP의 질문은 그가 C _from_ Swift를 호출하고 있으며, 포함하고있는'char ** '를'[[String]]'으로 강요하기를 원한다고 말한다. – TripeHound

+0

TripeHound가 맞습니다. 너는 그 길을 잘못 잡았다. –

+0

나는 그것을 얻었습니다 @ ThomasKilian, 실수로 미안합니다 – rfermi