将scanf与NSStrings一起使用

Oma*_*mar 11 string scanf objective-c

我希望用户输入一个字符串,然后将输入分配给NSString.现在我的代码看起来像这样:

NSString *word; 

scanf("%s", &word);
Run Code Online (Sandbox Code Playgroud)

pro*_*rmr 8

所述的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不是您想要用来获取用户输入的内容.


Chu*_*uck 7

scanf不适用于任何对象类型.如果你有一个C字符串并想从中创建一个NSString,请使用-[NSString initWithBytes:length:encoding:].


Mar*_*rkP 7

scanf不适用于NSString,因为scanf不适用于对象.它仅适用于原始数据类型,例如:

  1. INT
  2. 浮动
  3. BOOL
  4. 烧焦

该怎么办?

从技术上讲,字符串由一系列单个字符组成.因此,要接受字符串输入,您可以读取字符序列并将其转换为字符串.

使用:

[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)

以下是对上述代码的解释,评论评论:

  1. 您声明一个名为cstring的变量来容纳40个字符.
  2. 然后,通过使用%s格式说明符告诉scanf预期字符列表.
  3. 最后,从读入的字符列表中创建NSString对象.

运行你的项目; 如果输入单词并按Enter键,程序应打印出您键入的单词.只要确保单词少于40个字符; 如果你输入更多,你可能会导致程序崩溃 - 欢迎你自己测试一下!:]

取自:RW.

  • 如果你使用`NSUTF8StringEncoding`作为编码选项,而不是`1`,可能会更好理解. (2认同)
  • 如何处理换行和空格? (2认同)