我正在尝试将字符串数组附加到 C 中的共享内存。我已尽力将字符串数组(array1 和数组 2 到共享内存)附加。
这里,array1 和 array2 是宽度为 20 个字符和大小为 5 的字符串数组(我如何在附件中指定它对我来说也不是很清楚)。此外,a 和 b 分别是一维整数和浮点数组,大小为 5。
我想通过在运行时更新它们的值来改变字符串数组的状态,就像我正在做的那样。
#include <stdio.h>
#include <stdlib.h>
#include<sys/shm.h>
#define NUMBER_OF_DATA 5
int main()
{
int size=(NUMBER_OF_DATA*(sizeof(int)+sizeof(float))) + (2*(20*NUMBER_OF_DATA));
key_t key;
key=ftok("/home/android/Desktop/newww.c",4);
int shmid=shmget(key,size,0777|IPC_CREAT);
int *a=(int *)shmat(shmid,0,0);
float *b=(float *)(a+NUMBER_OF_DATA);
char **array1=(char **)(b+NUMBER_OF_DATA);
char **array2=(char **)(array1+(20*NUMBER_OF_DATA));
int i;
for(i=0;i<5;i++)
{
printf("enter value\n");
scanf("%s",array1[i]);
}
shmdt(&shmid);
shmctl(shmid,IPC_RMID,0);
return 0;
}
我的其他过程执行以下操作
int shmid=shmget(key,size,0777|IPC_CREAT);
int *a1=(int *)shmat(shmid,0,0);
float *b1=(float *)(a1+NUMBER_OF_DATA);
char **array11=(char **)(b1+NUMBER_OF_DATA);
char **array22=(char **)((char *)array11+(20*NUMBER_OF_DATA));
for(i=0;i<NUMBER_OF_DATA;i++)
{
a1[i]=aaa[i];
b1[i]=bbb[i];
array11[i]=array111[i];
array22[i]=array2222[i];
}
其中 aaa,bbb,array111 和 array222 是其他数组,此进程从中将值加载到共享内存中。这两个过程加在一起并不能帮助我实现我想要的。
如果有人能指出原因并告诉我将字符串数组附加到内存的正确方法,那就太好了。谢谢。