Справочные таблицы в с - PullRequest
       12

Справочные таблицы в с

0 голосов
/ 17 ноября 2009

У меня есть эта справочная таблица:

char * table [ascii] [morse];

где ascii - это int (представляющее букву ascii), а morse - это строка длиной 4 + 1 (чтобы добавить ноль). Это таблица поиска, в которой вы запрашиваете букву 0 = a, и она должна возвращать ее более точное представление.

если у меня есть ..-. (например) в файле. и я хочу добавить это в таблицу поиска, где index (ascii) = 0, как мне это сделать. Кроме того, как мне распечатать всю информацию в справочной таблице как: 0> ..-. и т.д.

Если у вас не возникло проблем, скажите, пожалуйста, как я могу объяснить больше:)

Код, который я сейчас имею, чтобы поместить символы в таблицу вида: (и это неправильно):

void ascii-morse (Lookuptable *table, char ascii, char *morsepassed) {
  int index = ascii - 'a';
  char copy[5];
  strcpy(copy, morsepassed); // we need to copy the morse passed
  table->table[index][5] = copy;
}

Обратите внимание, что Lookuptable - это структура, и мне нужно, чтобы в мою функцию передавались те же переменные

Ответы [ 4 ]

3 голосов
/ 18 ноября 2009

Определение вашей таблицы немного неверно. У вас есть это:

char *table[ascii][morse];

Который (предполагая, что "ascii" равен 26, а "morse" равен 5) представляет собой таблицу из 26 * 5 указателей на символ. Вы на самом деле просто хотите 26 * 5 символов (5 символов для каждой буквы алфавита):

char table[ascii][morse];

Затем вы можете изменить свою функцию, чтобы использовать ее для копирования значения в таблицу:

strcpy(table->table[index], morsepassed);
1 голос
/ 17 ноября 2009
Казалось бы,

strcpy(table->table[(int)ascii], morsepassed) - это способ сделать это (какой «индекс» должен быть установлен? Может быть, (int)ascii? Я не вижу смысла).

0 голосов
/ 17 ноября 2009

Ваша переменная "copy" находится в стеке, она исчезнет при выходе из функции, а ваш указатель будет указывать на мусор.

Вам нужно использовать malloc и free для выделения строки кода Морзе или использовать массив символов фиксированного размера и копировать непосредственно в него.

0 голосов
/ 17 ноября 2009

Линия

table->table[index][5] = copy;

неправильно - вы не копируете строки таким способом в C. Это помогает? Вы также забыли инициализировать 'index'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...