将strcpy转换为共享内存中的字符串数组
我想(或需要)做一些类似的事情将strcpy转换为共享内存中的字符串数组,c,shared-memory,arrays,C,Shared Memory,Arrays,我想(或需要)做一些类似的事情 char **my_array = malloc(1000*64); strcpy(arr[0], "test"); 虽然我知道arr[0]并没有指向一个单独的已分配内存段,但我认为应该能够像这样将字符串复制到其中(但它是分段的)。这很有效 arr[0] = "test"; 然而,这是行不通的,因为我的实际目标是在共享内存中实现这一点 shm_array = shmget(IPC_PRIVATE, 1000 * 64, IPC_CREAT | 0644); m
char **my_array = malloc(1000*64);
strcpy(arr[0], "test");
虽然我知道arr[0]并没有指向一个单独的已分配内存段,但我认为应该能够像这样将字符串复制到其中(但它是分段的)。这很有效
arr[0] = "test";
然而,这是行不通的,因为我的实际目标是在共享内存中实现这一点
shm_array = shmget(IPC_PRIVATE, 1000 * 64, IPC_CREAT | 0644);
my_array = (char**) shmat(shm_array, (void**)0, 0);
实际上,我的问题可以改为:“如何在共享内存中创建字符串数组?”。我尝试创建1000个单独的“字符串”共享内存段,但除此之外,它不起作用,这似乎也是错误的。此外,我认为应该能够简单地使用相对指针偏移量写入一个大的共享内存段。您可以只创建一块内存并写入特定偏移量:
char * const buf = malloc(HUGE);
strcpy(buf + offset1, "hello");
strcpy(buf + offset2, "world");
最好使用
strncpy
并传递一个mage-offset
的大小,以确保不会跑过头。管理补偿是您自己的责任。如果效率不是那么重要,您也可以使用strncat。看起来您正在寻找1000 x 64的二维阵列。如果确实如此,您可以这样做:
struct shared_1000_by_64 {
char strings[1000][64];
};
struct shared_1000_by_64 *shared = malloc(sizeof(struct shared_1000_by_64));
for (int i = 0 ; i != 1000 ; i++) {
strcpy(shared->strings[i], "test");
}
这使用了防止数组丢失的标准技巧。如果要动态分配包含64个字符的数组,请使用指向数组的指针,而不是指向指针的指针:
char (*my_array)[64] = malloc(1000 * sizeof my_array[0]);
strcpy(my_array[0], "test");
或者对于共享内存案例
shm_array = shmget(IPC_PRIVATE, 1000 * sizeof my_array[0], IPC_CREAT | 0644);
my_array = shmat(shm_array, NULL, 0);
这就是我真正想要实现的。也适用于共享内存段。