目标 c - 在 Mac OS 上读取 Unicode 字符串



我维护的古代代码最初是这样的:

NSUInteger readUnicode(NSMutableString *string, signed char const * buf, signed long int offset, size_t bufsize)
{   
    NSUInteger initLength = [string length];
    signed char const * start = buf + offset;
    NSLog (@"--------> start: %S", start);
    [string appendFormat:@"%S", start];
    return [string length] - initLength;
}

XCode 抛出警告"格式指定类型'常量无符号短 *',但参数的类型为'常量有符号字符 *',并建议将 appendFormat:@"%S" 更改为 appendFormat:@"%s"

当我将 %S 更改为 %s 时,无论输入如何,我开始在返回字符串中只得到一个字符。

因此,我将代码更改为:

NSUInteger readUnicode(NSMutableString *string, signed char const * buf, signed long int offset, size_t bufsize)
{
    NSUInteger initLength = [string length];
    const unsigned short * start = (const unsigned short * )buf + offset;
    NSLog (@"--------> start: %S", start);
    [string appendFormat:@"%S", start];
    return [string length] - initLength;
}

。现在我似乎得到了所有的角色,而且没有警告。这是处理警告的方法吗?或者也许我可以/应该做其他事情?(除了更改输入 buf 的类型)

谢谢。

这是处理警告的方法吗?

也许不完全是。如果您使用宽字符串,为什么不声明您的函数来这样做呢?

NSUInteger readUnicode(NSMutableString *string, unichar const *buf, signed long int offset, size_t bufsize)
                                                ^^^^^^^
                                       Note the use of "unichar"!

然后你不需要丑陋的强制转换,你不会得到警告,你的程序也不会调用未定义的行为。

最新更新