2011-07-12 64 views
2

我一個C初學者,和編譯以下時收到一個錯誤:不兼容的類型爲結構和構件

typedef struct myStructType { 
    uint8_t myArray[6]; 
    uint8_t x; 
}myStruct; 

myStruct *pmyStruct; 

(*pmyStruct).myArray={1,2,3,4,5,6}; //getting error here 
(*pmystruct).x=3; 

誤差如下:不兼容的類型分配時輸入的內容'uint8_t [6]' 從類型 'uint8_t *'

回答

1

(*pmyStruct).myArray={1,2,3,4,5,6};

只能初始化陣列這種方式。像這樣使用它是在聲明後會導致錯誤。

你的問題是類似this post

0

當它聲明的數組可以初始化,所以你可以有:

int myarr[] = {1,2,3,4,5,6}; 

,但你不能用它作爲你的結構成員做到這一點。

爲您的目的在這裏使用一個循環

int i; 
for (i = 1;i<7;++i) 
    pmyStruct->myArray = i; 

(指出(*pmyStruct).myArray可以使用箭頭符號pmyStruct->myArray

對於更一般的集合號memcpy()的只是初始化它可以用來代替的了循環

(正如其他兩張海報中所提到的,在執行任何此操作之前,您必須爲您的結構分配空間,並在完成時釋放該空間)

2

這裏有相當多的問題。

首先,確保你有#include <stdint.h>在你的文件,因爲某些平臺將與uint8_t的問題。

其次,當你創建一個結構指針,你必須爲結構分配空間。這可以用下面的代碼來完成:

myStruct *pmyStruct = malloc(sizeof(struct myStructType)); 

正如其他人所說,你可以初始化數組時只使用{1,2,3...}。因此,將元素添加到陣列中,您需要:

for (int i = 0; i < 6; i++) 
    pmyStruct->myArray[i] = i+1; 

當你有一個結構指針,您可以訪問它與->操作元素。所以,你的最後一行是:

pmyStruct->x=3; 

最後,你需要一個主要的方法。全部放在一起:

#include <stdlib.h> 
#include <stdint.h> 

typedef struct myStructType { 
    uint8_t myArray[6]; 
    uint8_t x; 
}myStruct; 

int main() 
{ 
    myStruct *pmyStruct = malloc(sizeof (struct myStructType)); 

    for (int i = 0; i < 6; i++) 
     pmyStruct->myArray[i] = i+1; 

    pmyStruct->x=3; 

return 0; 
} 

一旦你的一切完成後,一定要與free(pmyStruct);釋放分配的空間,注重市值! pmystruct是不一樣的pmyStruct

祝你好運。

2

當你正在使用C99(該uint8_t// comment這麼說),你可以嘗試複合文字

#include <inttypes.h> 
#include <stdlib.h> 

struct myStructType { 
    uint8_t myArray[6]; 
    uint8_t x; 
}; 

int main(void) { 
    struct myStructType *pmyStruct; 
    pmyStruct = malloc(sizeof *pmyStruct); 
    if (pmyStruct) { 
    *pmyStruct = (struct myStructType){{1, 2, 3, 4, 5, 6}, 3}; // <== THIS 
    free(pmyStruct); 
    } 
    return 0; 
} 
0

如果你想使事情變得簡單,首先,你不想處理mallocfree,還可以先創建一個結構對象,然後用數據填充它,然後設置一個指針:

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

typedef struct myStruct { 
    uint8_t myArray[6]; 
    uint8_t x; 
} myStruct_t; 

int main() 
{ 
    //create obj 
    myStruct_t myObj; 

    //fill it with data 
    myObj.myArray[0] = 1; 
    myObj.myArray[1] = 2; 
    myObj.myArray[2] = 3; 
    myObj.myArray[3] = 4; 
    myObj.myArray[4] = 5; 
    myObj.myArray[5] = 6; 

    myObj.x = 3; 

    //set a pointer to it 
    myStruct_t *pObj = &myObj; 

    return 0; 
} 
相關問題