2

"array_"配列から文字をランダムに選択し、それを文字列に連結してから、新しい文字列を使用して配列を参照しようとしています。

たとえば、'8'から文字を取り出してtemp_holder[]に連結し"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();
}
4

4 に答える 4

2

配列参照テーブルに独自の名前を作成しない限り、やろうとしていることはできません。POSIX システムを使用していると仮定すると、グローバル シンボルを名前で参照できますが、そのためにはdlopen/dlsymを使用する必要があります。変数または関数名が共有ライブラリに由来しない場合は、-rdynamicGCC でコンパイルするときにプログラムをリンクするか、システムに相当するものをリンクする必要があります。

#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);
}
于 2012-07-05T08:07:56.643 に答える
0

たとえば、から文字「8」を選択し、temp_holder[]それを「array_」に連結して、参照に使用しますarray_8[][]

Cではそれを行うことはできません。変数の名前は実行時に無意味です。つまり、「名前で変数を取得する」ことはできません。

于 2012-07-05T07:49:57.047 に答える
0

ハッシュ テーブルを使用して配列へのポインターを格納すると、名前でアクセスできます。

于 2012-07-05T09:16:45.633 に答える