So I was wondering, is there some quick way of converting one NSArray filled with NSStrings to the equivalent UTF8string values?
I want to store some parameter configuration in a NSArray and then use them in a function that takes (int argv, const char *argv[]) as arguments.
I implemented this in a convoluted way
int argc = [gameParameters count];
const char **argv = (const char **)malloc(sizeof(const char*)*argc);
for (int i = 0; i < argc; i++) {
argv[i] = (const char *)malloc(sizeof(char)*[[gameParameters objectAtIndex:i] length]+1);
strncpy((void *)argv[i], [[gameParameters objectAtIndex:i] UTF8String], [[gameParameters objectAtIndex:i] length]+1);
}
but I’m not really happy with and cleaning up memory is tedious.
Do you know a better way to achieve this result?
Your current implementation is not correct if the string contains non-ASCII characters. For example, the string @”é” (SMALL LETTER E WITH ACUTE) has length 1, but the UTF-8 sequence “C3 A9” has 2 bytes. Your code would not allocate enough memory for that string.
(In other words:
[string length]returns the number of Unicode characters in the string, not the number of bytes of the UTF-8 representation.)Using
strdup(), as suggested by Kevin Ballard, would solve this problem:But you should also check if duplicating the strings is necessary at all. If you call the function in the current autorelease context, the following would be sufficient: