不推荐使用stringWithCString ...那么我对sysctlbyname返回的char*使用什么?

Jan*_*ann 11 iphone sdk nsstring ios

我知道如何stringWithCString在SQLite中更改时处理这个问题...而你只是stringWithUTF8String改为.这是用同样的char *,当它被退回sysctlbyname?(见下面的代码)

- (NSString *) platform{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine];
    free(machine);
    return platform;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Ada*_*eld 20

如果您使用的C字符串是UTF-8编码的,那么请使用stringWithUTF8String:.如果它是纯ASCII,那么使用stringWithCString:encoding:编码NSASCIIStringEncoding.否则,它可能使用Latin-1编码,在这种情况下,您应该使用stringWithCString:encoding:编码NSISOLatin1StringEncoding.

在这种情况下,sysctlbyname几乎可以肯定会给你一个ASCII字符串,所以你应该这样做:

NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)

虽然使用其他两种方法中的任何一种都不会对你造成伤害.