大家好,我正在学习c和im,目前正在研究堆栈,结构和指针。我使用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("Enter the Product id: ");
scanf("%d", &myID);
用。。。来代替int myID;
printf("Enter the Product id: ");
scanf("%d", &myID);
情况2:-您要在其中存储产品名称的情况下,变量myName
应该是字符数组。char myName;
printf("Enter the Product Name: ");
scanf("%s", &myName);
用。。。来代替char myName[50];
printf("Enter the Product Name: ");
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/