2015-04-27 199 views
0

我首先將一系列元素連接到輔助數組中,然後將連接數組分配給指針。將此char數組分配給指針時會出現問題,它會在其中產生分段錯誤。將數組的值分配給指針

我的做法是以下之一:

char aux_name [12]; 
char * name = (char *) malloc(sizeof(char)*13); 
int i; 

for(i = 0; i < 5; i++){ 
    sprintf(aux_name, "id_%i", i); 
    *name = (void *) (intptr_t) aux_name; //Conflict line 

    //Do something with variable name (it is required a pointer) 

} 
+4

標準警告:請[不要投(http://stackoverflow.com/ q/605845/2173917)'malloc()'和'C'中的家族的返回值。 –

+0

附註:執行5次完全相同的任務有什麼意義? –

回答

1

你不分配指針值到一個已經malloc() -ed指針,你會在那裏面臨memory-leak。你必須使用strcpy()來實現你想要的。

OTOH,如果你不動態分配內存,那麼你可以將鼠標指針像

name = aux_name; 

這就是說,

我第一串聯一系列元素的輔助字符array

那麼,你不是。你每次迭代都會覆蓋數組。你需要做的是

  1. 每次收集返回值sprintf()
  2. 下一次迭代,將指針緩衝區提前到多個位置,以合併爲之後的新輸入。

注意/建議:

  1. do not castmalloc()和家人在C返回值。

  2. sizeof(char)保證爲c標準中的1。您不需要使用它,只需放下該部分即可。

+1

關於'sizeof(char)'的評論是主觀的。有些人認爲應該在那裏讓所有的malloc調用保持一致。使用它與否是個人喜好,沒有對錯(不像malloc的結果,總是不好/多餘的)。 – Lundin

+0

@Lundin先生,你說得很對。但正如根據不使用'malloc()'result ['它讓你重複你自己,通常是壞的'部分]'的邏輯之一一樣,我們可以_suggest_不使用'sizeof(char)',isn'它呢?但是,我更新了我的評論。希望現在可以。 :-) –

+0

是的,@ downvoter,請原因?我哪裏做錯了? –

0

你不能做到這一點,你不真的需要,這將工作

size_t nonConstanSizeInBytes = 14; 
char *name = malloc(nonConstanSizeInBytes); 

snprintf(name, 13, "id_%i", i);