结果代码只在我的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);
答案 0 :(得分:0)
s匹配一系列非空白字符;下一个 指针必须是一个 指向char的指针,数组必须足够大才能接受所有序列 和终止NUL字符。输入字符串在空格或at处停止 最大字段宽度,以先到者为准。
我猜你首先得到字符串中的第一个单词。 顺便说一下,使用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];