如何 shmat 一个 char var[][], C

How to shmat a char var[][], C

我正在尝试将 char shm[][] var 附加到共享内存中,并且我有以下代码。

int main(){
    int shmid;
    key_t key;
    char shm[15][10];

    if ((key = ftok("test.c", 'R')) == -1) {
        perror("ftok");
        exit(1);
    }

    shmid=shmget(key, SHM_SIZE, IPC_CREAT | 0666);
    if(shmid<0){
        perror("shmget");
        exit(1);
    }


    shm=shmat(shmid, NULL, 0);
    if(shm==(void*)-1){ 
        perror("shmat");
        exit(1);
    }
}

尝试编译时出现以下编译错误:

error: assignment to expression with array type
     shm=shmat(shmid, NULL, 0);

我是不是做错了什么?

感谢您的帮助。

char *shm[15][10]是数组类型但是void *shmat(int shmid, const void *shmaddr, int shmflg);returns是指向内存的指针。

你可能应该做的是:

  1. char shm[15][10]; 更改为 char *shm;,现在它是指向包含字符数组的内存位置的指针。
  2. 添加从 (void *)(char *)
  3. 的演员表

shm = (char *) shmat(shmid, NULL, 0);

shmat(2) - Linux man page

你想要:

char (*shm)[10] = shmat(shmid, NULL, 0);

这是一个指向未知行数和十列的二维矩形数组的指针。