2012-04-07 22 views
0

我想要(或需要)的阵列做沿着Ç的strcpy成字符串的共享存储器

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个单独的“字符串”共享内存段,但除此之外它没有工作,它似乎也是错误的。此外,我认为应该简单地使用相对指针偏移量来写入一个大的共享内存段。

回答

1

你可以只创建一个单件的存储和写入特定的偏移:

char * const buf = malloc(HUGE); 

strcpy(buf + offset1, "hello"); 
strcpy(buf + offset2, "world"); 

它可能会是更好地使用strncpy并通过大小的HUGE - offset一起,以确保你不跑结束。管理抵消是你自己的责任。或者你可以使用strncat,如果效率并不重要。

+0

这就是我真正想要完成的。与共享内存段一起工作。 – MarkM 2012-04-07 19:28:15

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标准的把戏。

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);