предупреждение: формат "% c" ожидает тип "int", но аргумент 2 имеет тип "char *" - PullRequest
2 голосов
/ 24 января 2012

Я пытаюсь вывести на экран все символы, хранящиеся в шестнадцатеричном массиве, один за другим, но я получаю эту странную ошибку в строке 16. Насколько я знаю,% c должен ожидать символ, а не int , Почему я получаю эту ошибку? Ниже мой код, спасибо.

    #include <stdio.h>
    #include <stdlib.h>
    #include <limits.h>
    #include <ctype.h>
    #include <string.h>

    int main() 
    {
        char hex[8] = "cf0a441f";
        int hexCounter;
        char *currentHex;

        for(hexCounter=0; hexCounter<strlen(hex); hexCounter++)
        {
            currentHex = &hex[hexCounter];
            printf("%c",currentHex);
        }   
         return 0;
    }

Ответы [ 4 ]

8 голосов
/ 24 января 2012

Вы имеете в виду

printf("%c", *currentHex);

По моему мнению, вы можете удалить всю идею currentHex, поскольку она просто добавляет сложность без всякой ценности. Просто сделайте:

printf("%c", hex[hexCounter]);

Важным моментом является то, что вы должны передать значение самого персонажа, а не его адрес, который вы делаете.

0 голосов
/ 24 января 2012

Вот модифицированный код, который мне подходит -

#include <stdio.h>
#include <stdlib.h>

#include <limits.h>
#include <ctype.h>
#include <string.h>

int main() 
{
    char hex[9] = "cf0a441f";
    unsigned int hexCounter; 
    char *currentHex;
    for(hexCounter=0; hexCounter<strlen(hex); hexCounter++)
    {
        currentHex = &hex[hexCounter];
        printf("%c",*currentHex);
    }   
     return 0;
}
0 голосов
/ 24 января 2012

У вас есть hex[hexCounter] как char, поэтому при установке

currentHex = &hex[hexCounter];

вы устанавливаете currentHex по адресу char, то есть char *. Таким образом, в вашем printf вам нужно

printf("%c",*currentHex);

То, что вы делаете, в любом случае не нужно, поскольку вы можете просто сделать

printf("%c",hex[hexCounter]);
0 голосов
/ 24 января 2012

currentHex должно быть типа char, а не char *.

 char currentHex;

 [..]

 currentHex = hex[hexCounter];
 printf("%c",currentHex);

Если вы действительно хотите, чтобы он был указателем, разыменуйте его для печати:

printf("%c",*currentHex);
...