我是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;
}
答案 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]));