如何 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是指向内存的指针。
你可能应该做的是:
- 将
char shm[15][10];
更改为 char *shm;
,现在它是指向包含字符数组的内存位置的指针。
- 添加从
(void *)
到 (char *)
的演员表
shm = (char *) shmat(shmid, NULL, 0);
你想要:
char (*shm)[10] = shmat(shmid, NULL, 0);
这是一个指向未知行数和十列的二维矩形数组的指针。
我正在尝试将 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是指向内存的指针。
你可能应该做的是:
- 将
char shm[15][10];
更改为char *shm;
,现在它是指向包含字符数组的内存位置的指针。 - 添加从
(void *)
到(char *)
的演员表
shm = (char *) shmat(shmid, NULL, 0);
你想要:
char (*shm)[10] = shmat(shmid, NULL, 0);
这是一个指向未知行数和十列的二维矩形数组的指针。