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

Ios 为什么我的代码只在Xcode中打印数组中的第一个元素?,ios,objective-c,c,arrays,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 c

生成的代码只打印出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);
s匹配一系列非空白字符;下一个 指针必须是一个 指向char的指针,并且数组必须足够大以接受所有序列 和终止NUL字符。输入字符串在空白处或在 最大字段宽度,以先到者为准

来自曼斯坎夫

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

因为您正在使用scanf(“%s”,str)读取一个单词

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

用于阅读整行

fgets(str, sizeof(str), stdin);    
这将把整行读入
str


要去掉数组最后一个索引中的
'\n'
字符,最简单的方法是更改拆分数组的方式:

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

NSLog(“%d”,[mutableWords count])
应该会揭示答案。我怀疑,是否有其他单词没有被传递到数组中的原因??记录您的
str
,您的
str
可能是错误的,我用
str
代替了
的“adaf fdsf sdf”
它的日志是正确的,我明白了……那么我如何阅读用户输入的全部内容呢?对不起,我来自Ruby世界,所以这个设置给我的第一印象是非常奇怪的。难道不可能将整个字符串读入一个变量中,然后将其拆分为一个由单个空格分隔的数组,而不需要跳转吗?可以。我刚刚更新了答案。我在寻找阅读整行文字的解决方案。我并没有从控制台上读太多的东西,因为我的Obj-C编程99%都是基于GUI的。它说调用的参数太少,应该是3个2@NYCTechEngineer不管怎样,您都可以使用我放在那里的
fgets
方法。它提供了:不兼容的指针类型将“char[3]”传递给“size\t”类型的参数(又名unsigned long*),该消息是针对getline的