将结构数组作为参数传递给函数
passing struct array as parameter to a function
我正在尝试在结构数组中设置结构数组。为此我创建了一个函数。我怎么试过我做不到。
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
这里不能使用strcpy
;那是针对以 null 结尾的字符串。 struct
不是以 null 结尾的字符串 :) 要复制对象,请使用 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 代码。
我正在尝试在结构数组中设置结构数组。为此我创建了一个函数。我怎么试过我做不到。
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
这里不能使用strcpy
;那是针对以 null 结尾的字符串。 struct
不是以 null 结尾的字符串 :) 要复制对象,请使用 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 代码。