在Objective-C中,比较字符串为false

在Objective-C中,比较字符串为false,objective-c,nsstring,Objective C,Nsstring,我使用isEqual方法比较两个字符串,它给出了NO if ([trie.name isEqual:string]) { isFound = YES; break; } trie.name是使用[[NSString alloc]initWithCharacters:&uchar length:ucharLen]初始化的字符串,其中uchar是一个unichar。字符串是一个常量字符串@“N”。我已经检查了散列值,两者都不同。我不知道为什么使用不同的初始值设定项创建字符串会对同一

我使用
isEqual
方法比较两个字符串,它给出了
NO

if ([trie.name isEqual:string]) {
    isFound = YES;
    break;
}
trie.name
是使用
[[NSString alloc]initWithCharacters:&uchar length:ucharLen]
初始化的字符串,其中
uchar
是一个
unichar
字符串是一个常量字符串
@“N”
。我已经检查了散列值,两者都不同。我不知道为什么使用不同的初始值设定项创建字符串会对同一字符串值给出不同的哈希值。在这种情况下,如何检查字符串是否相等

请参阅所附的调试变量屏幕截图


目前,我正在使用以下代码:

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"]);
如果我将
长度:
设为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个字符

因此,结果字符串包含两个字符-一个是您实际需要的字符,另一个是恰好位于该内存地址的随机垃圾位

只是硬代码1:

unichar uchar = [string characterAtIndex:0];
NSString *str = [[NSString alloc] initWithCharacters:&uchar length: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个字符

因此,结果字符串包含两个字符-一个是您实际需要的字符,另一个是恰好位于该内存地址的随机垃圾位

只是硬代码1:

unichar uchar = [string characterAtIndex:0];
NSString *str = [[NSString alloc] initWithCharacters:&uchar length:1];

似乎您的问题不在于比较字符串。使用
[[NSString alloc]initWithCharacters:&uchar-length:ucharLen]
无法获得预期结果。您应该更新您的问题,显示用于创建字符串的所有相关代码。@rmaddy对,问题在于初始值设定项中的长度。我已经更新了问题,明白了。
initWithCharacters:
采用C数组。您的问题似乎不是比较字符串。使用
[[NSString alloc]initWithCharacters:&uchar-length:ucharLen]
无法获得预期结果。您应该更新您的问题,显示用于创建字符串的所有相关代码。@rmaddy对,问题在于初始值设定项中的长度。我已经更新了问题,明白了。
initWithCharacters:
采用C数组。