表达式必须是可修改的左值(指向struct的指针)

时间:2015-05-18 22:51:06

标签: c arrays pointers struct structure

我已经查看了类似的问题,但我们没有真正找到问题的答案。

在我的程序中,我有一个函数sortdata,如下所示:

void sortdata(Person *arr[], int noElements)
{
    /* temporary pointer to Person data type to aid with swapping */
    Person *tempptr = (Person *)malloc(sizeof(Person));

    int i = 0;

    /* loop I am working on to sort my data */
    if (arr[i]->zip > arr[i + 1]->zip) 
    {
        /* stores value in index i for array inside of temporary pointer */
        tempptr->name = arr[i]->name;
    }
}

我收到了问题中描述的错误:

  tempptr->name = arr[i]->name;

temp不被识别为可修改的左值。为什么是这样?我在我的程序中的另一个函数中有这个代码:

while ((gets(teststring)) != NULL && i < 50)
{
    /* dynamically allocates memory for each index of the array */
    arr[i] = (Person*)malloc(sizeof(Person));

    /* takes in data from user/ input file */

    strcpy(arr[i]->name, teststring);
    gets(arr[i]->address);
    gets(arr[i]->citystate);
    gets(arr[i]->zip);
    printf("\n");
}

我以前没有初始化arr [](arr []是指向从程序中其他地方传递的结构的指针数组。)

如何制作它以便我可以将值存储在tempptr中的arr [i]中?

以下是我需要的结构定义:

/* structure defintion with typedef */
typedef struct person{
    char name[50];
    char address[50];
    char citystate[30];
    char zip[10];
}Person;

这个程序用于课程作业,所以虽然我很感激任何帮助,但我只关心如何能够在tempptr中存储值,以便我可以执行交换。谢谢。

2 个答案:

答案 0 :(得分:1)

您需要使用:

strcpy(tempptr->name, arr[i]->name);

您无法分配char[50]数组,而是必须复制到该数组。

答案 1 :(得分:0)

您需要使用strcpy来修改char []。