2011-05-27 74 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*` */ 
相關問題