2010-07-10 63 views
11

我想让用户输入一个字符串,然后将输入分配给NSString。现在我的代码如下所示:使用scanf与NSStrings

NSString *word; 

scanf("%s", &word); 

回答

7

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

+0

如何创建c字符串?你可以编辑我的代码,告诉我如何。 – Omar 2010-07-10 21:10:47

+0

C字符串是一个字符数组,所以你只需写'char word [100]'。 – 2012-09-23 10:17:03

8

scanf函数读入一个C字符串(实际上字符数组),就像这样:

char word[40]; 

int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL) 

您可以将字符数组转换为NSString的是这样的:

NSString* word2 = [NSString stringWithBytes:word 
            length:nChars 
            encoding:NSUTF8StringEncoding]; 

然而 scanf仅适用于控制台(命令行)程序。如果您尝试在Mac或iOS设备上输入内容,那么scanf不是您想用来获取用户输入的内容。

+0

'scanf'是否使用'char *'工作?我不想限制使用固定字符数组的输入。 – raffian 2012-09-04 02:09:34

+0

@SAFX:是的,但使用scanf有风险,请参阅[详细信息](http://stackoverflow.com/q/2430303/154803)。这就是为什么我使用了固定大小的缓冲区并限制了scanf中的长度。 – progrmr 2012-09-17 21:26:02

+0

@progrmr也许这是过时的?我为stringWithBytes调用得到'不知道类方法'。 – sunny 2015-07-20 22:13:06

1

是的,但是sscanf可以,并且可能是复杂的NSString解析的一个很好的解决方案。

4

这是我会怎么做它:

char word [40]; 
scanf("%s",word); 

NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding]; 
+0

注意:您不需要放置'&'由于单词不是指针,并且是实际的字符数组。 – ManOx 2012-10-30 17:19:24

7

scanf函数不NSString的工作作为scanf函数不上对象。它仅适用于基本数据类型,如:

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

怎么办?

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

使用:

[NSString stringWithCString:cstring encoding:1]; 

这里是一个工作示例:

NSLog(@"What is the first name?"); 
char cstring[40]; 
scanf("%s", cstring); 

firstName = [NSString stringWithCString:cstring encoding:1]; 

下面是上面代码的说明,通过注释评论:

  1. 您声明一个变量称为CString的保存40个字符。
  2. 然后,您通过使用%s格式说明符告诉scanf期望一个字符列表。
  3. 最后,从被读取的字符的列表中创建一个NSString对象

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

摄影者:RW。

+2

如果你使用'NSUTF8StringEncoding'作为编码选项,而不是'1',可能会更好理解。 – 2014-06-01 14:04:15

+0

如何处理新的线条和空白? – anoop4real 2017-09-30 05:22:47

0

简单的办法就是

char word[40]; 
scanf("%39s", word); 
NSString* word2 = [NSString stringWithUTF8String:word]; 
1

也许这会为你工作,因为它接受字符串的空间为好。

NSLog(@"Enter The Name Of State"); 
char name[20]; 
gets(name); 
NSLog(@"%s",name); 
0

NSFileHandle类是文件描述符的面向对象的包装器。对于文件,您可以在文件中读取,写入和查找。

NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput]; 
NSData *inputData = [inputFile availableData]; 
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];