gpt4 book ai didi

c - 字符串存在,但未打印

转载 作者:行者123 更新时间:2023-11-30 16:32:20 25 4
gpt4 key购买 nike

我想我有一个非常有趣的问题。我正在尝试用 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;
}

主要是我写的那行“这里!!!”没有正确给出真实的输出。实际上它没有给出任何东西。有趣的是,whis 给出了正确的输出:

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

我尝试打印出字符串中的每个字符,结果表明字符串主要正常。但我看不到。为什么会这样?

最佳答案

stackHead 是在 main() 函数中创建的局部变量。在 push() 方法中对 stackHead 进行的任何修改或更改都不会影响 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 */
}

关于c - 字符串存在,但未打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com