我希望(或需要)按照
的方式做点什么char **my_array = malloc(1000*64);
strcpy(arr[0], "test");
虽然我知道arr [0]并没有指向一个单独的已分配内存,但我认为应该能够像这样将一个字符串复制到它中(但它是segs)。这工作
arr[0] = "test";
然而这不会起作用,因为我的实际目标是在共享内存中执行此操作。
shm_array = shmget(IPC_PRIVATE, 1000 * 64, IPC_CREAT | 0644);
my_array = (char**) shmat(shm_array, (void**)0, 0);
实际上我的问题可以改为:“你如何在共享内存中创建一个字符串数组?”。我尝试创建1000个单独的“字符串”共享内存段,但除此之外它不起作用它似乎也错了。此外,我认为应该只需使用相对指针偏移就可以写入一个大的共享内存段。
答案 0 :(得分:1)
你可以创建一个单独的内存并写入特定的偏移量:
char * const buf = malloc(HUGE);
strcpy(buf + offset1, "hello");
strcpy(buf + offset2, "world");
使用strncpy
并传递HUGE - offset
的大小可能会更好,以确保您不会跑到最后。管理抵消是您自己的责任。或者,如果效率无关紧要,您可以使用strncat
。
答案 1 :(得分:1)
看起来你正在寻找一个二维阵列1000乘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");
}
这使用了阻止数组decaying into a pointer的标准技巧。
答案 2 :(得分:0)
如果要动态分配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);