2012-07-05 21 views
2

我想從數組中隨機選擇一個字符,將它連接到字符串"array_",然後使用新字符串引用數組。如何使用連接兩個動態字符串生成的字符串動態引用數組?

例如,從temp_holder[]中挑選字符'8',將其連接到"array_",並用它來引用array_8[][]

下面是代碼:

#include <stdio.h> 

main() { 
    int i, j; 

    char array_8[5][4]; 
    //Array 
    for (i = 0; i < 5; i++) { 
     for (j = 0; j < 4; j++) { 
      array_8[i][j] = 'x'; 
      if ((i == 1 && j == 1) || (i == 1 && j == 2) || (i == 3 && j == 1) || (i == 3 && j == 2)){ 
      array_8[i][j] = ' '; 
      } 
     } 
    } 


    char myArray[5][4]; 
    //Array 
    for (i = 0; i < 5; i++) { 
     for (j = 0; j < 4; j++) { 
      myArray[i][j] = 'x'; 
      if ((i == 1 && j == 1) || (i == 1 && j == 2) || (i == 3 && j == 1) || (i == 3 && j == 2)){ 
      myArray[i][j] = ' '; 
      } 
     } 
    } 

    char temp_holder[6] = {'8', '8', '8', '8', '8'}; 
    srand(time(NULL)); 
    int r = rand() % 6; 

    char arrName[1][10] = {"array_"}; 
    char namesArr[10]; 
    strcpy(namesArr, "array_"); 
    int len = 7; 
    char arr_names[5][4]; 
    printf("\n%c\n", temp_holder[r]); 
    strcat(namesArr, &temp_holder[r]); 
    printf("\n%s\n", namesArr); 
    strncpy(arr_names, namesArr, len); 
    strcat(arr_names, "\0"); 
    printf("\n%s\n", arr_names); 


    int accEntry = 0; //Correct entry counter 
    for (i = 0; i < 5; ++i){ 
     for (j = 0; j < 4; j++) 
     if (myArray[i][j] == arr_names[i][j]){ 
      printf("\n MATCH FOUND %c\n", arr_names[i][j]); 
      accEntry++; 
     } 
    } 

    printf("\n\n\n%d\n\n\n", accEntry); 

    getchar(); 
} 
+0

變量名稱是程序員,而不是程序。 – Lundin

回答

0

例如,挑字符 「8」,從temp_holder[],串連 爲 「array_」,並用它來引用array_8[][]

你不能在C中這樣做。變量的名稱在運行時是沒有意義的,即你不能「按名稱獲取變量」。

2

除非您爲陣列查找表創建您自己的名稱,否則您無法執行您正在嘗試執行的操作。假設你有一個POSIX系統,你可以通過名字引用全局符號,但是你必須使用dlopen/dlsym這樣做。如果變量或函數名稱不是來自共享庫,那麼在編譯GCC時必須將該程序與-rdynamic鏈接,或者與您的系統相同。

#include <assert.h> 
#include <dlfcn.h> 

char array_8[][10] = { "hello", "world" }; 

int main() 
{ 
    void *h = dlopen(0, RTLD_NOW); 
    void *p = dlsym(h, "array_8"); 
    assert(p == array_8); 
    dlclose(h); 
} 
0

你顯然不能那樣做。您可以使用指針數組,這些指針可用於保存對陣列的引用。

+0

因爲我不擅長C,所以你的解決方案似乎對我來說似乎最合理。如果你能向我展示一個解決方案的例子,那將是最有幫助的。 – diamondtrust66

0

您可以使用散列表來存儲指向數組的指針,這樣您就可以按名稱訪問它們。