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



我是obj-c的新手。如何解决?format 指定类型"int",但参数的类型为"无符号长整型"

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;
}

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"和其他长度修饰符:

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

您必须在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]));

相关内容

最新更新