2017-04-22 204 views
0

我想在結構數組中設置結構數組。爲此我創建了一個函數。我怎麼試試它,我無法做到這一點。將結構數組作爲參數傳遞給函數

struct polygon { 
struct point polygonVertexes[100]; 
}; 
struct polygon polygons[800]; 
int polygonCounter = 0; 


int setPolygonQuardinates(struct point polygonVertexes[]) { 
    memcpy(polygons[polygonCounter].polygonVertexes, polygonVertexes,4); 
} 

int main(){ 

    struct point polygonPoints[100] = {points[point1], points[point2], points[point3], points[point4]}; 

    setPolygonQuardinates(polygonPoints); 
    drawpolygon(); 
} 



void drawpolygon() { 
    for (int i = 0; polygons[i].polygonVertexes != NULL; i++) { 
     glBegin(GL_POLYGON); 
     for (int j= 0; polygons[i].polygonVertexes[j].x != NULL; j++) { 
      struct point pointToDraw = {polygons[i].polygonVertexes[j].x, polygons[i].polygonVertexes[j].y}; 
      glVertex2i(pointToDraw.x, pointToDraw.y); 
     } 
     glEnd(); 
    } 
} 

當我運行此我得到以下錯誤

Segmentation fault; core dumped; real time 
+0

「我無法做到這一點是什麼意思?」 – OldProgrammer

+0

此代碼的任何特定錯誤? – Gaurav

+0

對不起的英語感到抱歉。我的意思是我無法將polygonPoints數組複製到polygon結構的polygonVertexes成員中。 setPolygonQuardinates函數執行後,polygonVertexes成員具有垃圾值。 –

回答

0

你不能在這裏使用strcpy;那是以空字符結尾的字符串。 A struct不是以空字符結尾的字符串:)要複製周圍的對象,請使用memcpy

要在C中傳遞數組,第二個參數說明數組中的對象數通常也會傳遞。或者,數組和長度被放入一個結構體中,並且該結構體被傳遞。

編輯:如何做到這一點的一個例子:

void setPolygonQuardinates(struct point* polygonVertexes, size_t polygonVertexesSize) { 
    memcpy(polygons[polygonCounter].polygonVertexes, polygonVertexes, sizeof(point) * polygonVertexesSize); 
} 

int main(){ 
    struct point polygonPoints[100] = {points[point1], points[point2], points[point3], points[point4]}; 
         /*  ^---------v make sure they match */ 
    setPolygonQuardinates(polygonPoints, 100); 
    drawpolygon(); 
} 

如果你需要這個解釋,請詢問。我認爲這是慣用的C代碼。

+0

我試過這個,但我仍然得到相同的錯誤。我還能做些什麼來將點數組存儲在結構成員數組中 –

+0

我已經用一個例子編輯了我的答案。 – InternetAussie

+0

非常感謝您的幫助,解決了我的問題。我仍然在學習編碼,並且很想知道如何更好地編寫代碼。 –