【问题标题】:Ppointer and data structure指针和数据结构
【发布时间】:2014-02-12 14:37:08
【问题描述】:

我的目标是为我的数据结构创建一个推送函数。

我正在尝试做的事情:

  1. 要求客户输入三个字符的 obj 词,例如。盒子
  2. 然后将 obj 名称传递给 push 函数(现在头尾指针为空)
  3. 然后计算机会为此分配内存,然后函数会返回一个内存地址
  4. 然后我将使用该地址将 obj 名称存储到我的对象数组中。

我正在尝试逐步完成此数据结构,目前我似乎无法将 obj 名称保存到 objArray。可以不返回指针吗?

#include <stdio.h>
#include <string.h>

char *push(char element, char *head, char *tail){
    char *dq;
    dq = (char*)malloc(4*sizeof(char));
    head=dq;
    return head;
}

int main(){
    char input[7];
    char command[7];
    char objArr;
    char objname[4];
    char *head;
    char *tail;

while(printf("Choose from the ff operations by typing:\npush\npop\ninject\neject\nexit\nInput Command: ")&&fgets(input, 6, stdin)){
    sscanf(input, "%s", command);

    if(strcmp(command, "exit")==0){
        break;
    }
    if(strcmp(command, "push")==0){
        printf("Input an object name to push: ");
        fgets(objname, 4, stdin);

        head = push(objname, *head, *tail);
        objArr[head] = objname;
        printf("%s", objArr[head]);
        break;
    }

    if(strcmp(command, "pop")==0){
        break;
    }

    if(strcmp(command, "inject")==0){
        break;
    }

    if(strcmp(command, "eject")==0){
        break;
    }

}

}

【问题讨论】:

  • 很难解决这个问题,这里有很多错误。实际上,该程序中对数组和指针的每次使用都是不正确的,例如objArr 不是一个数组,但您将其视为一个数组并尝试使用指针对其进行索引,您永远不会在您的push() 函数中复制字符串,您为dq 分配内存但从不初始化它,objname 是一个数组,但你将它传递给一个需要 char 的函数。这是一次勇敢的尝试,但除了复习基础知识并再次尝试之外,很难提出任何建议。
  • 这个编译是否没有警告,所有警告都打开(gcc options -Wall -Wextra -pedatnic)?

标签: c pointers data-structures


【解决方案1】:

在这一行:

 head = push(objname, *head, *tail);

您正在取消引用 headtail 并且没有为其分配任何内存。那是未定义的行为。

要么分配指针,要么像这样传递它:

 head = push(objname, head, tail);

您的程序中还有其他错误。就像 push 的第一个参数是 char,但您将其传递给 char[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多