«Переменные» имена переменных в C - PullRequest
2 голосов
/ 25 марта 2011

Я думаю, что то, что я ищу, на самом деле невозможно в C, но, возможно, у некоторых есть идея, как обойти это:Эти данные приведены в int с указанием количества данных и количества строк (то есть char *), которые содержат фактические данные.Эти строки называются data_0 ... data_n:

 int n = 42; // the number of strings
 char *data_0 = "some input1";
 char *data_1 = "some input2";
 ....
 char *data_41 = "the last input data";

Так вот как я получаю данные.Теперь вопрос: как я могу это обработать?Моя цель - хранить их в большом массиве.Инициализация этого массива, конечно, проста, мне просто нужен массив n char-Pointer, который я получаю с помощью malloc.Но затем я хочу назначить эти строки в массив.И это тот момент, когда я застрял.Мне нужно назначить их динамически, так как я не знаю размер раньше.Что-то вроде:

 for(i = 0; i < n; i++)
      datastorage[i] = data_i;

Так что я имею в виду динамический доступ к имени переменной.Я надеюсь, вы понимаете, что я имею в виду :) Спасибо.

Ответы [ 3 ]

4 голосов
/ 25 марта 2011

Сделайте массив в первую очередь!Абсолютно бессмысленно иметь 42 отдельные переменные, если вам нужно обращаться к ним как к массиву!Кстати, в C имена переменных недоступны во время выполнения, они просто теряются после компиляции, поэтому забудьте о динамическом доступе к переменным по имени.

int n = 42; // the number of strings
char *data[42];
      data[0] = "some input1";
      data[1] = "some input2";
....
      data[41] = "the last input data";

for(i = 0; i < n; i++)
    datastorage[i] = data[i];
1 голос
/ 25 марта 2011

Я не уверен на 100%, что вы пытаетесь сделать, чтобы быть честным ...

Из того, что я вижу, вы хотите в конечном итоге поместить все эти элементы в массив.

Так почему бы просто не использовать массив из 42 элементов и назначить его в зависимости от того, что вы можете анализировать с помощью ключа.

т.е.] = указатель вашего символа.

Это звучит правильно?

Вы также можете создавать объекты (структуры в C ...) и динамически помещать их в другую, более динамичную структуру данных.

1 голос
/ 25 марта 2011

Нет простого способа сделать это в C, потому что весь смысл массивов состоит именно в том, чтобы избавиться от необходимости делать что-то подобное.Традиционно каждый использует массивы, так что вы можете ссылаться на несколько различных переменных по их индексу, не требуя уникального имени для каждой из этих переменных.

Я нахожу странным, что вы будете получать входные данные для своей программы как источник Сифайл с одной переменной в строке, как это.Если вы генерируете этот C-файл, вы должны вместо этого сгенерировать его для использования массивов, избавляя от необходимости запрашивать корректирующий код.Если кто-то еще дает вам C-код, как это, попросите его изменить его на использование массивов;нет никаких причин для того, чтобы вам самим это доставляло неудобства, и изменение должно быть очень простым для самостоятельного внесения.

...