2013-07-12 27 views
0

我已經陣列的以下聲明變換單字符數組一個多維數組

char array1[10] = "Nick"; 
char array2[10] = "Tomas"; 
char array3[10] = "Nathan"; 
char array4[10] = "John"; 
char array5[10] = "Paul"; 
char *new_array[3][1]; 

我想用這種方式來創建一個新表

Nick Tomas 
Nick Nathan 
Nick John 
Nick Paul 

,首先是我new_array的聲明正確?其次我想是這樣,現在這當然是不正確的

for (j = 0; j<4; ++j) 
    { 
     new_array[j][k]=array1; 
     for (k = 0; k<2; ++k) 
     { 
      new_array[j][k]=array2; 
     } 
    } 
    for (j = 0; j<4; ++j) 
     for (k = 0; k<2; ++k) 
     { 
      printf("%s\t", new_array[j][k]); 
      if(j==1) 
      printf("\n"); 
     } 

我想一個解決方案或一些細節如何做到這一點使用循環

直到
+1

沒有,'new_array'聲明是不正確的。外部數組的大小對於實際數據來說很小。 –

+0

循環是不可能的,因爲你輸入的字符串是單獨的。 –

回答

3

爲什麼就不能像

char *new_array[][2] = { 
    { array1, array2 }, 
    { array1, array3 }, 
    { array1, array4 }, 
    { array1, array5 } 
}; 

爲了得到這個數組中的條目數,你可以使用

sizeof(new_array)/sizeof(new_arrag[0]) 

但是,如果您將此數組作爲參數傳遞給函數,它會衰減爲指針,並且無法使用「trick」。相反,您必須將數字與數組一起傳遞。


要打印,每次兩個條目,這樣的事情也可以使用:

for (size_t i = 0; i < sizeof(new_array)/sizeof(new_arrag[0]); i += 2) 
    printf("%s %s\n", new_array[i], new_array[i + 1]); 
+0

'NULL'終止'new_array'怎麼辦? – alk

+0

@alk我在OP的代碼或問題中沒有看到任何暗示它需要的問題,但它只是在數組初始化中最後添加一個「{NULL,NULL}」行。 –

+0

@alk你應該可以使用'sizeof(new_array)'。 – Kninnug