gpt4 book ai didi

objective-c - 将一个填充有 NSString 的 NSArray 转换为 UTF8String vector

转载 作者:行者123 更新时间:2023-11-30 15:52:24 25 4
gpt4 key购买 nike

所以我想知道,是否有一些快速的方法可以将一个充满 NSString 的 NSArray 转换为等效的 UTF8string 值?

我想将一些参数配置存储在 NSArray 中,然后在以 (int argv, const char *argv[]) 作为参数的函数中使用它们。

我以一种复杂的方式实现了这个

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);
}

但我不太满意,清理内存很乏味。

您知道实现此结果的更好方法吗?

最佳答案

如果字符串包含非 ASCII 字符,则当前的实现不正确。例如,字符串@“é”(带有尖音的小写字母E)的长度为1,但UTF-8序列“C3 A9”有2个字节。您的代码不会为该字符串分配足够的内存。

(换句话说:[string length] 返回字符串中的 Unicode 字符数,而不是 UTF-8 表示形式的字节数。)

按照 Kevin Ballard 的建议,使用 strdup() 可以解决这个问题:

argv[i] = strdup([[gameParameters objectAtIndex:i] UTF8String]);

但是您还应该检查是否有必要复制字符串。如果您在当前自动释放上下文中调用该函数,则以下内容就足够了:

int argc = [gameParameters count];
const char **argv = (const char **)malloc(sizeof(const char*)*argc);
for (int i = 0; i < argc; i++) {
argv[i] = [[gameParameters objectAtIndex:i] UTF8String];
}
yourFunction(argc, argv);
free(argv);

关于objective-c - 将一个填充有 NSString 的 NSArray 转换为 UTF8String vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com