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; 问题

我是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;
问题是它给出的是我在数组声明中指定的长度,而不是元素计数。
有什么想法吗?

这里有一些错误

  • 您希望用户输入一个“单词”,即字符串。然后不要使用只扫描一个字符的
    %c
    ,而是使用扫描一个字符串的
    %s
    (请注意,这可能意味着用户还输入空格,或超过29个字符)

  • 您可以在阵列之外进行存储。数组被声明为

    char parola[30];
    
  • 这意味着可以使用值0对其进行索引。。29但是您的
    &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