2014-01-09 4 views
2

Я новичок в obj-c. Как это исправить? Формат определяет тип «Int», но аргумент имеет тип «неподписанных долгое»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

Thx you very much! –

ответ

1

Вы должны использовать хороший формат в 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])); 
+0

да, ты прав, мой плохой ... – jml

+0

@MartinR Извините, я начинаю с быстрого ответа, который был не совсем правильным, а затем исправить его и исправить (спасибо Эрику). И да, финналы это совсем одно и то, что я сожалею ... но кому это нужно? – jml

+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 или соответствующему аргументу типа целочисленного типа;
Смежные вопросы