【问题标题】:How to dynamically reference an array using a string generated by concatenating two dynamic strings?如何使用通过连接两个动态字符串生成的字符串动态引用数组?
【发布时间】:2012-07-05 07:47:15
【问题描述】:

我正在尝试从数组中随机选择一个字符,将其连接到字符串 "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();
}

【问题讨论】:

  • 变量名是给程序员的,不是给程序的。

标签: c arrays string dynamic char


【解决方案1】:

除非您为数组查找表创建自己的名称,否则您无法做您想做的事情。假设您有一个 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);
}

【讨论】:

    【解决方案2】:

    例如,从temp_holder[] 中选择字符“8”,连接 它到“array_”并用它来引用array_8[][]

    您不能在 C 中这样做。变量的名称在运行时没有意义,即您不能“通过名称获取变量”。

    【讨论】:

      【解决方案3】:

      你显然不能这样做。你可以使用一个指针数组,它可以用来保存对你的数组的引用。

      【讨论】:

      • 你的解决方案对我来说似乎最合理,因为我不太擅长 C。如果你能给我看一个你的解决方案的例子,那将是最有帮助的。
      【解决方案4】:

      您可以使用哈希表来存储指向数组的指针,这样您就可以按名称访问它们。

      【讨论】:

        猜你喜欢
        • 2017-07-18
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 2011-03-11
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多