Cocoa NSString isEqualToString:不工作。为什么?

Cocoa NSString isEqualToString:不工作。为什么?,cocoa,nsstring,Cocoa,Nsstring,我使用 NSString *myString = [[NSString alloc] initWithBytes:someBuffer length:sizeof(someBuffer) encoding:NSASCIIStringEncoding]; 我使用NSLog输出myString,它显示“Hello” 如果是这样,那为什么失败呢 NSString *helloString = @"Hello" BOOL check = [myString isEqualToString:hello

我使用

NSString *myString = [[NSString alloc] initWithBytes:someBuffer length:sizeof(someBuffer) encoding:NSASCIIStringEncoding];
我使用NSLog输出myString,它显示“Hello”

如果是这样,那为什么失败呢

NSString *helloString = @"Hello"

BOOL check = [myString isEqualToString:helloString];

调用NSLog()时,可能有一些尾随字符无法看到。例如:空格、换行符甚至“\0”字符


检查[myString length]是否返回5。

调用NSLog()时可能无法看到一些尾随字符。例如:空格、换行符甚至“\0”字符


检查[myString length]是否返回5。

您的myString变量实际上是一个长度为64的NSString;附加字符可能未定义。您最想做的是:

NSString *myString = [[NSString alloc] initWithBytes:someBuffer length:strlen(someBuffer) encoding:NSASCIIStringEncoding];

这假设缓冲区中存在以null结尾的C字符串。

您的myString变量实际上是一个长度为64的NSString;附加字符可能未定义。您最想做的是:

NSString *myString = [[NSString alloc] initWithBytes:someBuffer length:strlen(someBuffer) encoding:NSASCIIStringEncoding];

这假设缓冲区中存在以null结尾的C字符串。

如果忘记提到“someBuffer”的定义如下。unsigned char someBuffer[64]如果忘记提到“someBuffer”的定义如下。无符号字符缓冲区[64]完美。这很有效。您只需要添加一个强制转换操作,如下所示。非常感谢。NSString myString=[[NSString alloc]initWithBytes:someBuffer length:strlen((const char)someBuffer)encoding:NSASCIIStringEncoding];抱歉应该是(const char*),或者更好的是,[[NSString alloc]initWithCString:someBuffer encoding:NSASCIIStringEncoding]。完美。这很有效。您只需要添加一个强制转换操作,如下所示。非常感谢。NSString myString=[[NSString alloc]initWithBytes:someBuffer length:strlen((const char)someBuffer)encoding:NSASCIIStringEncoding];抱歉应该是(const char*),或者更好的是,[[NSString alloc]initWithCString:someBuffer encoding:NSASCIIStringEncoding]。