2013-03-21 35 views
0

我有以下代碼:在C傳遞不同結構類型的功能

typedef struct PStruct{ 
int len; 
char* data; 
}PointerStruct; 

typedef struct AStruct{ 
int len; 
char data[256]; 
}ArrayStruct; 

void checkFunc(PointerStruct* myData) 
{ 
    if (0 == myData || 0 == myData->data){ 
    printf("error\n"); 
    } 
} 

int main() 
{ 
    ArrayStruct my_data; 
    my_data.len = 256; 
    char data[] = "data is sent"; 
    my_data.data = &data; 
    checkFunc((PointerStruct*)my_data); 
    return 0; 
} 

是否有任何錯誤的傳遞結構,其具有陣列。所需的是指針。 請讓我知道。

+0

'char []'是一種'char *'。在一種情況下,大小在編譯時已知,而另一種情況則不是。你可以在技術上只使用'PointerStruct',因爲兩者都提供了'len'。 – 2013-03-21 14:51:42

回答

0

在程序中有幾點要考慮。

char data[] = "data is sent"; 

這是一個13個字符的字符數組。因此,my_data.data = &data;會給出一個編譯錯誤,如下圖所示

error: incompatible types when assigning to type 'char[256]' from type 'char (*)[13]' 

要複製你的字符串,你很可能使用的strcpy如下圖所示

strcpy(my_data.data, data); 

下一個點傳遞指向對象。在此調用中,您將對象的實例傳遞給函數調用,但將類型轉換作爲指針。由於數據類型不匹配,您將面臨彙編問題。error: cannot convert to a pointer type

要解決此錯誤,您應該將對my_data對象的引用作爲checkFunc((PointerStruct*) &my_data);傳遞給對象。因此,你的新main功能將類似於

int main() 
{ 
    ArrayStruct my_data; 
    my_data.len = 256; 
    char data[] = "data is sent"; 
    //my_data.data = &data; 
    strcpy(my_data.data, data); // Use of strcpy. You would require to include <string.h> 
    checkFunc((PointerStruct*)(&my_data)); // Pass a reference and not by value 
    return 0; 

}

有了這些變化,你的代碼應該工作正常。