1. ホーム
  2. c

[解決済み] エラー: 読み取り専用位置の割り当て

2022-02-08 23:12:23

質問

このプログラムをコンパイルすると、次のようなエラーが出ます。

example4.c: In function ‘h’:
example4.c:36: error: assignment of read-only location
example4.c:37: error: assignment of read-only location

ポインターに関係すると思うのですが、どうすれば直るのでしょうか?

コード

#include <stdio.h>
#include <string.h>
#include "example4.h"

int main()
{
        Record value , *ptr;

        ptr = &value;

        value.x = 1;
        strcpy(value.s, "XYZ");

        f(ptr);
        printf("\nValue of x %d", ptr -> x);
        printf("\nValue of s %s", ptr->s);


        return 0;
}

void f(Record *r)
{
r->x *= 10;
        (*r).s[0] = 'A';
}

void g(Record r)
{
        r.x *= 100;
        r.s[0] = 'B';
}

void h(const Record r)
{
        r.x *= 1000;
        r.s[0] = 'C';
}

解決方法は?

関数内で h を宣言しています。 r は、定数 Record -- を変更することはできません。 r またはそのどの部分であっても、それは不変です。

読み方には右左のルールを適用する。

を渡していることにも注意してください。 コピー r を関数 h() -- もし、あなたが r の場合、定数でないポインタを渡す必要があります。

void h( Record* r)
{
        r->x *= 1000;
        r->s[0] = 'C';
}