2011-05-27 40 views
-1

在下面的代码,而我分配到len1阵列a 正在一个错误的错误是赋值时将指针整数,未作铸

assignment makes integer from pointer without a cast 

请帮助我。

void main() 
{ 
    int i=0; 
    char a[7]={0x00,0xdc,0x01,0x04}; 
    char str[70] = "123456644454464644456456456564564544132131113132132"; 
    int len=0; 
    char len1[50]={}; 
    len = strlen(str); 
    printf("The Length is : %02x", len); 
    printf("The Length is : %d", len); 
    sprintf(len1,"0x%02x",len); 
    printf("The Len1 value : %s", len1); 

    a[4]=len1; // This line causes the error. 

    for(i=0;i<=7;i++) 
    { 
     printf("%05c",a[i]); 
     //printf("%x",a[i]); 
    } 
} 
+1

什么是'一[4] = len1'该怎么办? – cnicutar 2011-05-27 10:04:06

+0

这个'a [4] = len1'应该是'strncpy(&a [4],len1,2)'假设你想从len(十六进制值)中将前2个字符复制到位置5 + 6数组a。 – forsvarir 2011-05-27 10:04:52

+1

说真的,你需要阅读一本解释C编程基础知识的书。 – Asha 2011-05-27 10:07:41

回答

1

的问题是,a[4]char,而len1是字符数组!

当你声明

char a[7] = {...} 

你是说你想成为字符数组和你在一个在{...}初始化值的值。

当你说a[4]你是说去4哪里,并使用那里的值,这是一个char。 但len1char pointer因此,当您将其分配给a[4]时,您会收到警告!

+3

数组不是指针。请回答你的答案。 – 2011-05-27 10:19:06

+0

+1 @Michael; -1 @Bogwonch:我喜欢[c-faq](http://c-faq.com/)的第6部分来说明**数组不是指针**。 – pmg 2011-05-27 10:23:56

+0

够公平的!我走了,看着差异,你是对的! – Bogwonch 2011-05-27 10:25:25

1

您声明中(子)表达式的类型是什么?

a[4] = len1; 

len1是50个字符(类型char[50])的阵列,但在上面的表达式它衰减到一个指向它的第一个元素。这是char*类型的值。
a[4]char类型的对象。

您不能将char*分配给char类型的对象!

我想,也许你想

/* BEWARE BUFFER OVERFLOWS */ 
strcpy(a+4, len1); /* a+4 is of type `char*`, len1 decays to `char*` */ 
相关问题