당신은 당신이 의지 할 수 없기 때문에 일부 동적 메모리를 수행 할 것 UTF8String 용 백업 메모리가 릴리스되었습니다.
NSArray *strings = @[ @"String 1", @"Other string", @"Random String"];
char **cStrings = NULL;
NSInteger numCStrings = strings.count;
if (numCStrings) {
cStrings = (char **)calloc(numCStrings, sizeof(char*)) ;
if (cStrings) {
// Safer to allocate memory for each string
for (NSInteger i=0;i<numCStrings;i++) {
NSString *nsString = strings[i];
char *cString = (char *)malloc([nsString lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1); // + 1 for \0
if (cString) {
strcpy(cString, nsString.UTF8String);
cStrings[i] = cString;
} else {
// You should handle your error
}
}
} else {
// You should handle your error
}
}
for (NSInteger i=0;i<numCStrings;i++) {
NSLog(@"C-String (%ld): %s", i, cStrings[i]);
}
// Note you need to free your memory later!
// Do any additional setup after loading the view, typically from a nib.
for (NSInteger i=0;i<numCStrings;i++) {
if (cStrings[i]) {
// Free each string
free(cStrings[i]);
}
}
// Free the array
free(cStrings);
cStrings = NULL;
numCStrings = 0;
C API가 문자열의 내용을 변경합니까? – kennytm
나는 그렇게 생각하지 않지만 이론적으로는 그렇게 할 수있다. – zeroimpl
그렇다면 아무것도 원래 NSArray를 수정하게됩니다. 위는 기본적으로 올바른 접근 방식입니다. 지루한'malloc'과'strncpy'를 추가하여 전체 복사본을 만들고 싶을뿐입니다. 답은 위와 C에 있습니다. –