2012-04-07 63 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);