好吧,我敢肯定,这不是一个太难的问题,但是我想了这么久之后迷失了,所以这里的代码首先是我的结构体声明。
struct GraphicElement {
char* fileName;
struct GraphicElement* pNext;
};
struct RasterGraphic {
struct GraphicElement* GraphicElements;
};
然后我调用一个函数,该函数负责初始化,我认为它可以正常工作。
int main(void)
{
char response;
BOOL RUNNING = TRUE;
struct RasterGraphic RG;
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
InitRasterGraphic(&RG);
init函数如下
void InitRasterGraphic(struct RasterGraphic* pA)
{
pA->GraphicElements = malloc(sizeof(struct GraphicElement));
if (pA->GraphicElements == NULL) return;
//pA->GraphicElements = 0;
//pA->GraphicElements->pNext = NULL;
//pA->GraphicElements->fileName = NULL;
pA->GraphicElements->fileName = (char*)malloc(sizeof(char));
return;
}
因此,代码的下一部分是我要问我的问题的地方。我有一个函数,需要用户输入某种字符串。我想接受该输入并将其添加到下一个元素。因此,每次用户调用函数时,他们都会在输入中添加该函数并将其添加到下一个元素中。我现在的代码一团糟,我知道它肯定已经走了很多路了。我相信我需要使用realloc。我在这里无法解决的问题是如何获取输入并将其添加,以便以后可以按顺序打印所有元素。因此,例如,用户调用函数3次,并输入“ hello”“ world”。稍后我想循环浏览并打印 图形1是“你好” 图形2是“世界”
void InsertGraphicElement(struct RasterGraphic* pA)
{
char response[256];
printf("Insert a GraphicElement in the RasterGraphic\nPlease enter the GraphicElement filename: ");
scanf("%s", &response[0]);
pA->GraphicElements->fileName = realloc(pA->GraphicElements, 256*sizeof(char));
pA->GraphicElements++;
strcpy(pA->GraphicElements->fileName, &response);
if (pA->GraphicElements == 1){
printf("\nThis is the first GraphicElement in the list\n");
}
return;
}
答案 0 :(得分:0)
这是您代码中的几个问题。
我相信InitRasterGraphic
应该只是初始化pA->GraphicElements = NULL
而不是malloc
对其进行初始化。由于应该在InsertGraphicElement
函数中进行处理。
pA->GraphicElements->fileName = (char*)malloc(sizeof(char));
仅分配大小为memory
的{{1}},而char
ing和alloc
ing中没有意义。 / p>
realloc
应该是scanf("%s", &response[0]);
。
scanf("%s", &response[0]);
这是错误的,而是使用一个以上的成员来维护列表中的节点数。
因此,更正了上述问题之后,您的代码将如下所示。
您的pA->GraphicElements++;
如下所示。
RasterGraphic
您的struct RasterGraphic {
int numNodes;
struct GraphicElement* GraphicElements;
};
如下所示。
InitRasterGraphic
您的void InitRasterGraphic(struct RasterGraphic* pA)
{
pA->GraphicElements = NULL;
pA->numNodes = 0;
return;
}
如下所示。
InsertGraphicElement