字符串在那里,但没有打印

时间:2018-05-06 13:44:10

标签: c gcc stack printf

我猜这个问题非常有趣。我正在尝试在C中实现Stack。这是我的标题和实现文件(我还实现了Push):

my.h:

typedef struct {
    char type[3];
    int nrOfOpr;
    int num;
} BizarreNumber_t;

struct stackNode {
    BizarreNumber_t data;
    struct stackNode *nextPtr;
};

// stack related
extern void push(struct stackNode *topPtr, BizarreNumber_t info);

my.c:

void push(struct stackNode *topPtr, BizarreNumber_t info){
    struct stackNode *newTop = malloc(sizeof(struct stackNode));
    struct stackNode oldTop = *topPtr;
    newTop->data=info;
    newTop->nextPtr=&oldTop;
    *topPtr=*newTop;
// printf("topPtr->next->data: %s\n", topPtr->nextPtr->data.type);
//
// printf("oldTop->data: %s\n", oldTop.data.type);
// printf("newTop->data: %s\n", newTop->data.type);
// printf("topPtr->data: %s\n", topPtr->data.type);
}

最后这是我的main.c:

int main(int argc, char const *argv[]) {
    struct stackNode* stackHead=malloc(sizeof(struct stackNode));

    BizarreNumber_t a={"sa",1,1};
    BizarreNumber_t b={"as",2,2};

    stackHead->data=a;
    stackHead->nextPtr=NULL;

    printf("%s\n", stackHead->data.type);
    push(stackHead,b);

    printf("%s\n", stackHead->nextPtr->data.type);//HERE!!!
    return 0;
}

主要是我写的这行#34; HERE !!!"没有正确地给出真正的输出。实际上它没有给出任何东西。有趣的是,whis给出了正确的输出:

printf("%c\n", stackHead->nextPtr->data.type[0]);

我试图打印出字符串中的每个字符,结果说String很好。但我看不到。为什么会这样?

1 个答案:

答案 0 :(得分:0)

stackHead是在main()函数中创建的局部变量。在stackHead方法中对push()所做的任何修改或更改都不会影响main()方法,因为它只是按值调用。

而不是将stackHead的地址传递给push()方法

push(&stackHead,b); /* pass the address of stackhead */

并相应地更改push()的定义。

 void push(struct stackNode **topPtr, BizarreNumber_t info){
        struct stackNode *newTop = malloc(sizeof(struct stackNode));
        newTop->data = info;
        newTop->nextPtr = *topPtr; /*new node next make it to head node */
        *topPtr=newTop; /*update the head node */
 }