如何讓用戶為 msgbuf.mtext 輸入自定義訊息?每當我嘗試手動更改它時,我都會收到以下錯誤:
struct msgbuf msg
expression must be a modifiable lvalue
我究竟做錯了什么?
struct msgbuf {
long mtype;
char mtext[80];
};
int main() {
int qid, opt;
int mode = 0;
int msgkey = 1234;
qid = msgget(msgkey, IPC_CREAT | 0666);
struct msgbuf msg;
msg.mtext = "hello";
msgsnd(qid, (void *) &msg, sizeof(msg.mtext), 0);
printf("sent: %s\n", msg.mtext);
return 0;
}
uj5u.com熱心網友回復:
資料成員mtext被宣告為字符陣列。
char mtext[80];
陣列是不可修改的左值。您不能將一個陣列分配給另一個陣列。
對于字串,您應該使用例如標strcpy頭中宣告的標準字串函式<string.h>
strcpy( msg.mtext, "hello" );
mtext或者您可以在物件的宣告中初始化資料成員,msg例如
struct msgbuf msg = { .mtext = "hello" };
如果你想輸入一個字串,scanf你可以寫
scanf( "ys", msg.mtext );
或者
scanf( " ys", msg.mtext );
或者
scanf( "y[^\n]", msg.mtext );
或者
scanf( " y[^\n]", msg.mtext );
也在這個電話中
msgsnd(qid, (void *) &msg, sizeof(msg.mtext), 0);
看來您需要使用運算式strlen( msg.mtext ) 而不是運算式sizeof(msg.mtext)。并且強制轉換void *為運算式&msg是多余的。指向任何物件型別的指標都可以轉換為 型別的指標void *。
注意資料成員mtype沒有被初始化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516692.html
