gpt4 book ai didi

c - 将值推送到结构时堆栈崩溃

转载 作者:行者123 更新时间:2023-11-30 19:04:58 25 4
gpt4 key购买 nike

大家好,我正在学习 c,目前正在研究堆栈、结构和指针。我使用 Visual Studio 来执行我的程序,每当我输入输入时,程序就会崩溃。我可以确定错误来自产品名称。我也很困惑,因为它包含指针字符。任何人都可以指出我的错误吗?谢谢

这是我的代码

#include<stdio.h>
#include<string.h>
#define MAX 10
int top = -1;

struct Product {

int prodId;
char *prodName;

};
struct Product arrP[MAX];
struct Product pop();
void push(int id, char *name);
int isFull();
int isEmpty();


struct Product pop()
{
struct Product temp;

temp = arrP[top];
top--;

return temp;
}

void push(int id, char *name)
{
top++;
arrP[top].prodId = id;
strcpy(arrP[top].prodName,name);
}

int isFull()
{
if (top == MAX)
return 1;
else
return 0;
}

int isEmpty()
{
if (top == -1)
return 1;
else
return 0;
}


int main()
{
int myID;
char *myName;

//Push the value
printf("Enter the Product id: ");
scanf("%d", &myID);

printf("Enter the Product Name: ");
scanf("%s", &myName);

push(myID, &myName);
printf("%d %s", arrP[top].prodId ,arrP[top].prodName);

}

最佳答案

有一些简单的错误,您可以避免我在使用 -Wall 标志进行编译时听到编译器警告。

情况1:-变量myId假设是一个整型变量,而不是一个指针变量。如果你希望它是指针变量,那么你应该先为其分配内存。

int *myID;

printf("请输入产品编号:");

scanf("%d", &myID);

替换为

int myID;

printf("请输入产品编号:");

scanf("%d", &myID);

情况 2:- 变量 myName 应该是字符数组,因为您想要将产品名称存储到其中。

char myName;

printf("请输入产品名称:");

scanf("%s", &myName);

替换为

char myName[50];

printf("请输入产品名称:");

scanf("%s", myName);

调用push()函数时只需传递myName。例如

push(myID, myName);

还有这个声明strcpy(arrP[top].prodName,name);

导致问题,因为prodName结构中的指针成员,您应该为此动态分配内存,然后进行复制。

arrP[top].prodName = malloc(SIZE);

strcpy(arrP[top].prodName,name);

关于c - 将值推送到结构时堆栈崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50795970/

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