Oma*_*mar 11 string scanf objective-c
我希望用户输入一个字符串,然后将输入分配给NSString.现在我的代码看起来像这样:
NSString *word;
scanf("%s", &word);
Run Code Online (Sandbox Code Playgroud)
所述的scanf函数读入C字符串(实际上字符数组),如下所示:
char word[40];
int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL)
Run Code Online (Sandbox Code Playgroud)
您可以将char数组转换为NSString,如下所示:
NSString* word2 = [NSString stringWithBytes:word
length:nChars
encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
但是 scanf仅适用于控制台(命令行)程序.如果您尝试在Mac或iOS设备上获取输入,则scanf不是您想要用来获取用户输入的内容.
scanf不适用于任何对象类型.如果你有一个C字符串并想从中创建一个NSString,请使用-[NSString initWithBytes:length:encoding:].
scanf不适用于NSString,因为scanf不适用于对象.它仅适用于原始数据类型,例如:
该怎么办?
从技术上讲,字符串由一系列单个字符组成.因此,要接受字符串输入,您可以读取字符序列并将其转换为字符串.
使用:
[NSString stringWithCString:cstring encoding:1];
Run Code Online (Sandbox Code Playgroud)
这是一个工作示例:
NSLog(@"What is the first name?");
char cstring[40];
scanf("%s", cstring);
firstName = [NSString stringWithCString:cstring encoding:1];
Run Code Online (Sandbox Code Playgroud)
以下是对上述代码的解释,评论评论:
运行你的项目; 如果输入单词并按Enter键,程序应打印出您键入的单词.只要确保单词少于40个字符; 如果你输入更多,你可能会导致程序崩溃 - 欢迎你自己测试一下!:]
取自:RW.