Objective-c-获取数组的计数元素
我是Objective-C新手,我想得到一组字符的元素数。我只能这样想:Objective-c-获取数组的计数元素,objective-c,Objective C,我是Objective-C新手,我想得到一组字符的元素数。我只能这样想: @autoreleasepool { char parola[30]; int c; NSLog(@"Write word:"); scanf("%c",&parola[30]); c = sizeof(parola)/sizeof(parola[0]); NSLog(@"The word has %i letters",c); } return 0; 问题
@autoreleasepool {
char parola[30];
int c;
NSLog(@"Write word:");
scanf("%c",&parola[30]);
c = sizeof(parola)/sizeof(parola[0]);
NSLog(@"The word has %i letters",c);
}
return 0;
问题是它给出的是我在数组声明中指定的长度,而不是元素计数。
有什么想法吗?这里有一些错误
%c
,而是使用扫描一个字符串的%s
(请注意,这可能意味着用户还输入空格,或超过29个字符)char parola[30];
&parola[30]
指向数组之外(在索引30处,它不“存在”)。那不是你想要的。这样做:
scanf("%s", parola);
希望用户输入的字符不要超过29个
然后可以使用
c = strlen(parola);
这就变成了:
@autoreleasepool {
char parola[30];
unsigned long c;
NSLog(@"Write word:");
scanf("%s", parola);
c = strlen(parola);
NSLog(@"The word has %ld letters", c);
}
return 0;
您也可以使用printf
,而不是NSLog:
printf("Write word: ");
及
这看起来会更干净,因为NSLog()
总是显示这些额外的信息,如
2017-06-04 12:37:25.758802+0200 SOTest[4718:2690388]
在我看来,这简直太难看了。适用于日志,但不适用于干净的屏幕输出。现在输出为:
Write word: Tesla
The word has 5 letters
Program ended with exit code: 0
@sulthan:您对另一个(已删除)答案的评论是:“在LLVM上根本不需要使用@autoreleasepool。每个线程默认都有一个。”这是正确的,但是如果您从菜单中启动Objective-C中的新控制台程序,
@autoreleasepool{}
部分是由Xcode生成的。它还使用NSLog()
来打印“你好,世界!”
,而不是printf()
。我认为使用NSString
会更幸运,因为您正在处理Objective-C。
Write word: Tesla
The word has 5 letters
Program ended with exit code: 0