为什么我的代码只在Xcode中打印数组中的第一个元素?

时间:2013-11-14 03:05:05

标签: ios objective-c c arrays

结果代码只在我的Xcode中打印出数组的第一个元素,即使我传递了三个单词。有什么理由吗?

char str[100] = {0};

        NSLog(@"Please enter three words: ");
        scanf("%s", str);
        NSString *words = [NSString stringWithUTF8String: str];

        NSMutableArray *mutableWords = [[words componentsSeparatedByString: @" "] mutableCopy];

        NSLog(@"%@", mutableWords);

3 个答案:

答案 0 :(得分:0)

  

s匹配一系列非空白字符;下一个   指针必须是一个          指向char的指针,数组必须足够大才能接受所有序列          和终止NUL字符。输入字符串在空格或at处停止          最大字段宽度,以先到者为准。

来自man scanf。

我猜你首先得到字符串中的第一个单词。 顺便说一下,使用scanf这种方式非常不安全。

答案 1 :(得分:0)

因为您正在使用scanf("%s", str);

阅读一个单词

来自http://www.cplusplus.com/reference/cstdio/scanf/

  

任意数量的非空白字符,在第一个字符处停止   找到了空白字符。终止空字符是   在存储序列的末尾自动添加。

使用getline阅读整行

答案 2 :(得分:0)

fgets(str, sizeof(str), stdin);    

这会将整行读入str


摆脱作为数组最后一个索引的'\n'字符的最简单方法是简单地更改分割数组的方式:

NSMutableArray *mutableWords = [[words componentsSeparatedByCharactersInSet:
    [NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy];