如何在不使用gets()或scanf / sscanf的情况下获取字符串输入?

时间:2014-02-23 02:46:08

标签: objective-c

如何在Objective C中从控制台获取输入?我担心的是避免缓冲区溢出的可能性,这就是为什么我要避开gets()scanf()/sscanf()。从搜索StackOverflow,这就是我所见过的。目标C中的scanf()是否更安全到我不必担心的程度?

就在最近,我找到了这个例子:我喜欢它;但是已经有了这样的课程吗?

printf("What is your name?"); NSFileHandle *input = [NSFileHandle fileHandleWithStandardInput]; NSData *inputData = [NSData dataWithData:[input availableData]]; NSString *inputString = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding]; inputString = [inputString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; printf("Hello %s.n",[inputString UTF8String]);

1 个答案:

答案 0 :(得分:1)

如您所示,可以使用标准C I / O功能。由于您使用的是Objective-C,因此更安全。为避免缓冲区溢出问题,请使用fgets而不是gets。请注意,您将阅读C风格的字符串,如果需要NSString,则需要将其转换。

在Cocoa级别,您可以在显示时使用NSFileHandle。请注意,availableData返回所有可用数据而不是下一行,但由于控制台设备通常设置为行模式,因此如果用户未提前输入,则返回的是下一行。

在较低级别,您可以查看read

HTH