2010-08-27 59 views
1

我創建使用一個NSString,NSString isEqualToString:不起作用。爲什麼?

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

我使用的NSLog輸出的myString和它顯示 「Hello」。

如果是這樣,那麼爲什麼這會失敗。

NSString *helloString = @"Hello" 

BOOL check = [myString isEqualToString:helloString]; 
+0

如果忘記提及「someBuffer」的定義如下。 unsigned char someBuffer [64] – David 2010-08-27 19:42:26

回答

6

你的myString變量實際上是與64的長度一個NSString;額外的字符可能是未定義的。你最可能要做的是這樣的:

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

這假定你的緩衝區中存在一個空終止的C字符串。

+0

完美。這樣可行。你只需要添加一個鑄造操作如下。謝謝。 NSString * myString = [[NSString alloc] initWithBytes:someBuffer length:strlen((const char *)someBuffer)encoding:NSASCIIStringEncoding]; – David 2010-08-27 19:56:22

+0

對不起,應該是(const char *) – David 2010-08-27 19:56:58

+1

或者更好的是[[NSString alloc] initWithCString:someBuffer encoding:NSASCIIStringEncoding]。 – 2010-08-27 20:03:07

4

可能有一些拖尾字符在調用NSLog()時看不到。例如:空格,換行符或甚至'\ 0'字符。

檢查[myString的長度],看它是否返回5.

相關問題