format指定类型'int'但参数的类型为'unsigned long'

时间:2014-01-09 14:18:51

标签: objective-c c arrays long-integer unsigned

我是obj-c的新手。 怎么解决? format指定类型'int'但参数的类型为'unsigned long'

int main(int argc, const char * argv[])
{
    const char *words[4] = {"aardvark","abacus","allude","zygote"};
    int wordCount = 4;
    int i;

    for(i=0;i<wordCount;i++){
        NSLog(@"%s comprises %d chars", words[i], strlen(words[i]));
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

strlen()返回size_t,可以是32位或64位,具体取决于使用的 架构。

打印size_t的正确格式为%zu

NSLog(@"%s comprises %zu chars", words[i], strlen(words[i]));

参见http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html 对于“z”和其他长度修饰符:

  • ž
    指定以下[...]转换说明符适用于size_t或相应的有符号整数类型参数;

答案 1 :(得分:2)

您必须使用NSLog中的良好格式(它似乎使用与printf和cie相同的格式):

NSLog(@"%s comprises %zu chars", words[i], strlen(words[i]));

或者你可以转换strlen的回复:

NSLog(@"%s comprises %d chars", words[i], (int)strlen(words[i]));