2012-01-24 3 views
2

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

#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; 
    } 
+0

'hex' должен быть объявлен как' char hex [9] ', а не' [8] '. Вы забыли нулевой терминатор. – Gandaro

ответ

6

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

printf("%c", *currentHex); 

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

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

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

+0

Это рабочий человек :) – Suspended

+0

Спасибо, но почему я получил эту ошибку? – Suspended

+0

Потому что вы передали 'currentHex'' 'printf', а' currentHex' является указателем на 'char'. Кстати, это не ошибка, а предупреждение. – Gandaro

0

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

char currentHex; 

[..] 

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

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

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

Вы hex[hexCounter] как char так, когда вы установите

currentHex = &hex[hexCounter]; 

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

printf("%c",*currentHex); 

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

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

Вот измененный код, который прекрасно работает для меня -

#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; 
} 
Смежные вопросы