C语言高手 来帮帮我啊!lvalue required in function creat

来源:百度知道 编辑:UC知道 时间:2024/05/10 09:02:11
程序如下:
# include "stdio.h"
# include "stdlib.h"
# include "string.h"

# define NULL 0
# define LEN sizeof(struct PCB)

struct PCB
{
int id;
int priority;
int cputime;
int alltime;
int startblock;
int blocktime;
char state[7];
struct PCB *next;
};

struct PCB *creat(void);




int main(void)
{
.
.
.
}

struct PCB *creat(void)
{
struct PCB *head ;
struct PCB *p1 , *p2 ;
n = 0 ;

p1 = p2 = (struct PCB *) malloc(LEN);
head = p1;
p1 -> id = 0; p1 -> priority = 9; p1 -> cputime = 0; p1 -> alltime = 3; p1 -> startblock = 2; p1 -> blocktime = 3; p1 -> state = "R"; p1 -> next =NULL;
p2 = p1; p1 = (struct PCB *)malloc(LEN); p2 -> next = p1;
p1 -> id = 1; p1 -> priority = 38; p1 -&g

struct PCB
{
int id;
int priority;
int cputime;
int alltime;
int startblock;
int blocktime;
char state[7];
struct PCB *next;
};
把char state[7]; 改成char *state; 试试看

显然不可以把字符串赋值给字符数组。:-)

数组名所代表的地址不能被改变。
使用memcpy或者strcpy(p->state,"READY");

struct PCB
{
...
char state[7];
...
}

字符串数组在定义时可以如下line 1 那样;
而p1 -> state = "R";属于line 6 那样的给数组名赋值的操作。

1: char c[7] = "r"; /* ok */
2: char *p;
3: p=c; /* ok */
4: c=p; /* err */
5: p++; /* ok */
6: c++; /* err */

可以考虑这样解决你的问题
p1 -> state[0] = 'R';
p1 -> state[0] = '\0';