即使在运行程序时键入“stop”,也不会打印“Stopping”语句。 initWithUTF8String:
方法是否引入了额外的格式?
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
char holderText[256];
fgets(holderText, 256, stdin);
NSString *words = [[NSString alloc] initWithUTF8String:holderText];
if ([words isEqualToString:@"stop"]) {
NSLog(@"STOPPING");
}
NSLog(@"This is what you typed: %@", words);
[pool drain];
return 0;
}
答案 0 :(得分:6)
fgets
将在它给你的字符串中包含尾部换行符(除非它不适合缓冲区,但在这里不是这样),所以它将是"stop\n"
而是比"stop"
。
将日志行更改为:
NSLog(@"This is what you typed: [%@]", words);
应该有希望明确发生了什么。
修改比较以将此考虑在内,或在比较前修剪换行符。
答案 1 :(得分:3)
由于fgets
可能包含尾随换行符,您可能希望使用stringByTrimmingCharactersInSet:
修改字符串中的所有换行符:
NSString *trimmed = [words stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
if([trimmed isEqualToString:@"stop"]]) {
//...
}
答案 2 :(得分:2)
即使您泄漏了words
字符串,代码看起来还不错。您需要在该alloc调用的末尾添加[autorelease]
。
您可以尝试initWithCString
并修剪新行和周围的空格。
NSString *words = [[[NSString alloc] initWithCString:holderText] autorelease];
words = [words stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];