C通过函数传递值会更改函数中的该值

时间:2015-03-20 16:51:03

标签: c

我的函数没有从main获取值。

    typedef struct {
        struct node *grip;

    }PoolQueue;


    struct node{
        char *temp;
        int *data;
        struct node *next;
    }node;

    PoolQueue *PQcreatePoolQueue(){
        PoolQueue *queue;
        queue = malloc(sizeof(PoolQueue));
        queue->grip = NULL;
        return queue;
    }

   int main()
    {
        char x[] = "";
        printf("Hello world!\n");
        PoolQueue *q = PQcreatePoolQueue();
        scanf("%s", &x);
        PQaddSingle(x, q);
        return 0;
    }

    void PQaddSingle(char *item, PoolQueue *queue){
        if(queue->grip == NULL) printf("It is null");

    }

当我调用函数PQaddSingle时,我在main中创建的queue-> grip不再是NULL。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是因为你的扫描存储位置非常糟糕。您正在扫描一个零字节的项目来存储数据...这会导致未定义的结果,在这种情况下,可能会覆盖您的q值 - 显然还有一个您仍然可以读取的值。尝试在q之前和之后打印scanf的值,看看我的意思。

更好的是,声明x的长度要比输入长(包括行终止和NULL终止)!