大家好,我正在学习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/

10-15 02:13