2014-02-23 28 views
0

如何從目標C中的控制檯獲取輸入?我關心的是避免緩衝區溢出的可能性,這就是爲什麼我要避開gets()和scanf()/ sscanf()。從搜索StackOverflow,這就是我所看到的。目標C中的scanf()更安全一些,我不必擔心?如何在不使用gets()或scanf/sscanf的情況下獲得字符串輸入?

就在最近,我發現這個例子:我喜歡它;但是有沒有這樣的課程?

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]);

+0

寫在Objective-C的iOS應用程序具有的UITextField和,也許需要輸入? :D –

回答

1

標準C I/O功能可被使用,因爲你指示。他們是而不是更安全,因爲你正在使用Objective-C。爲避免緩衝區溢出問題,使用fgets而不是gets。請注意,如果您需要NSString,您將閱讀C風格字符串並需要將其轉換。

在Cocoa級別,您可以使用NSFileHandle。請注意,availableData將返回所有可用數據,而不是下一行,但由於控制檯設備通常設置爲行模式,將返回的是用戶未提前輸入的下一行。

在較低的水平,你可以看看read

HTH

+0

'fgetln()'也值得一看,如果你想要面向行的輸入。如果你想讓用戶在輸入的時候編輯這行,你應該看看GNU readline或者BSD readline。 –

相關問題