向包含char指针的结构中添加元素

时间:2018-09-22 19:47:41

标签: c pointers realloc

好吧,我敢肯定,这不是一个太难的问题,但是我想了这么久之后迷失了,所以这里的代码首先是我的结构体声明。

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;
}

1 个答案:

答案 0 :(得分:0)

这是您代码中的几个问题。

  1. 我相信InitRasterGraphic应该只是初始化pA->GraphicElements = NULL而不是malloc对其进行初始化。由于应该在InsertGraphicElement函数中进行处理。

  2. pA->GraphicElements->fileName = (char*)malloc(sizeof(char));仅分配大小为memory的{​​{1}},而char ing和alloc ing中没有意义。 / p>

  3. realloc应该是scanf("%s", &response[0]);

  4. 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