У меня есть объект NSArray<NSString*>*
, и мне нужно вызвать API C, который принимает массив строк как char**
.Как преобразовать массив NSString в массив c-строк?
Каков наилучший способ для этого? Важное примечание: C-строка не должна иметь модификатора const
, так что-то вроде следующего не достаточно хорошо, так как UTF8String
возвращается const char*
:
NSArray<NSString*>* names = ...;
int len = args.count;
char* cNames[len];
for(int i = 0; i < len; i++) {
cNames[i] = names[i].UTF8String;
};
Будет ли C API изменять содержимое строк? – kennytm
Я так не верю, но теоретически это возможно. – zeroimpl
Если это так, ничего не изменит исходный NSArray. Вышесказанное в основном является правильным подходом. Вы просто хотите добавить утомительные 'malloc' и' strncpy', чтобы создать полную копию. Ответ: выше, плюс C. –