2012-07-20 27 views
0
int main() 
{ 
unsigned char a[3]; 
unsigned char (*p)[3]=NULL; 
unsigned char *q=NULL; 
int i = 0; 
a[0]=0; 
a[1]=1; 
a[2]=2; 
p=&a; 
for(i=0;i<3;i++){ 
    if((*p)[3] == a[3]){ 
    printf("*p[%d]:%d a[%d]:%d",i,(*p)[3],i,a[3]); 
    } 
} 
} 

o/p: 
*p[0]:0 a[0]:0*p[1]:0 a[1]:0*p[2]:0 a[2]:0 
Exited: ExitFailure 14 

我想將大小爲3的數組複製到指針並進行比較。我寫了一個示例程序。但我得到一個錯誤值。 我跑這個使用在線C編譯器。 (codepad.org) 請幫我識別我的錯誤。獲取EXITED錯誤:指向數組中的c的指針

+0

你似乎忘記了那個陣列從零開始的索引,指數最高的是大小減一。 – 2012-07-20 07:04:16

回答

4

你的可變p是一個數組,不是指針。您無法將陣列重新分配到其他位置,因此行

p = &a; 

無效。從0

此外,C索引你似乎知道,所以使用指數[3]尺寸爲3的數組比較是無效的。

此外,在您的比較循環中,您實際上並未使用i進行索引,而是始終使用無效常量索引[3]進行比較。

這不是從你的代碼(q不使用,例如)很清楚,但如果你想要做類似的東西聽起來

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

unsigned char a[3]; 
unsigned char *p; 

p = malloc(sizeof a); 
if(p != NULL) /* If allocation succeeded, p is valid. */ 
{ 
    int i; 

    memcpy(p, a, sizeof a); 
    for(i = 0; i < sizeof a; ++i) 
    { 
    if(p[i] == a[i]) 
     printf("p[%d]:%d a[%d]:%d\n", i, p[i], i, a[i]); 
    } 
    free(p); 
} 

當然,這將始終打印所有這些數字,因爲memcpy()將永遠無法複製的記憶。 :)

1

在這裏,你已經宣佈主要功能的返回類型INT,而不必返回從任何東西。 所以返回任何整數值(如1)或使主函數的返回類型void