2012-01-24 34 views
2

我试图将存储在十六进制数组中的所有字符逐个打印到屏幕上,但我得到了这个奇怪的错误在第16行。据我所知,%c应该是一个字符,而不是一个int。 为什么我得到这个错误? 以下是我的代码,谢谢。警告:格式'%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]; 

要设置currentHexchar的地址,即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; 
} 
相关问题