[英]Comparing strings is giving false in Objective-C
我正在使用isEqual
方法比较两个字符串,它给出了NO
。
if ([trie.name isEqual:string]) {
isFound = YES;
break;
}
trie.name
是使用[[NSString alloc] initWithCharacters:&uchar length:ucharLen]
初始化的字符串,其中uchar
是unichar
。 该string
是一个常量字符串@"N"
。 我检查了 hash 值,两者都不同。 我不确定为什么使用不同的初始化程序创建字符串会为相同的字符串值提供不同的 hash。 在这种情况下,如何检查字符串是否相等?
请参阅所附调试变量的屏幕截图。
目前,我正在使用代码:
NSString *string = @"Pirates";
unichar uchar = [string characterAtIndex:0];
size_t ucharLen = sizeof(uchar);
NSString *str = [[NSString alloc] initWithCharacters:&uchar length:ucharLen];
XCTAssertTrue([str isEqual:@"P"]);
如果我给出length:
为 1,它可以正常工作。 如何获得unichar
的长度。 它会一直是1
以便在这种情况下我可以硬编码1
吗?
问题在于:
unichar uchar = [string characterAtIndex:0];
size_t ucharLen = sizeof(uchar);
NSString *str = [[NSString alloc] initWithCharacters:&uchar length:ucharLen];
您正在从单个unichar
创建一个字符串,这意味着长度需要为1
。 但是sizeof(unichar)
返回 2,因为unichar
是一个 16 位(2 字节)的值,所以你最终告诉字符串你正在传递 2 个字符,而不是 1。
因此,生成的字符串包含两个字符 - 您真正想要的一个字符和第二个随机垃圾位,恰好位于该 memory 地址。
只是硬编码1:
unichar uchar = [string characterAtIndex:0];
NSString *str = [[NSString alloc] initWithCharacters:&uchar length:1];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.