我正在尝试从数组中随机选择一个字符,将其连接到字符串"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();
}
答案 0 :(得分: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);
}
答案 1 :(得分:0)
例如,从
temp_holder[]
中选择字符“8”,连接 它为“array_”并用它来引用array_8[][]
你不能在C中这样做。变量的名称在运行时没有意义,即你不能“按名称获取变量”。
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用哈希表来存储指向数组的指针,这样您就可以按名称访问它们。