Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Заполнение трехмерного массива


Автор: Zhunko 15.11.2009, 22:42
Может кто знает, как это сделать?

Код

void Fun(char (&aIndex)[12][70][10])
 {
  char lpBufTool[10] = "qwertyuio";
  char (*pBufTool)[10];
  //----
  strcpy (aIndex[2][3], lpBufTool);  // Не работает.
  strcat (aIndex[2][3], lpBufTool);  // Не работает.
   for (int i = 0; i < 10; i++) aIndex[2][3][i] = lpBufTool[i]; // Не работает.
   // Так тоже не работает.
   pBufTool = &aIndex[2][3];
   strcpy (*pBufTool, lpBufTool);
   //----
   cout << aIndex[2][3] << endl;
 }

Надо без библиотек CLR, чтобы в стиле С.
Интересно, что это всё для двухмерного массива работает...

Автор: bsa 16.11.2009, 12:49
"В стиле Си" нет ссылок, которыми ты пользуешься.

Подозреваю, что ты перемудрил. Озвучь задание полностью.

Автор: Zhunko 16.11.2009, 13:37
Это, как нет ссылок? Имел ввиду без string.

По коду, по моему, и так видно...
Надо заполнить третье измерение строковыми символами (char).

Только, что провёл эксперимент.
Код

for (i = 0; i < 9; i++) aIndex[2][3][i] = 49 + i; // Так работает.

Т.е. надо теперь преобразовать буквы в числа char (коды ASCII).

Автор: bsa 16.11.2009, 13:56
Цитата(Zhunko @  16.11.2009,  13:37 Найти цитируемый пост)
Это, как нет ссылок?
Очень просто - нет. Т.е. код 
Код
char (&aIndex)[12][70][10]
 не скомпилируется.
И вообще, массивы всегда по указателю и передаются (т.е. символ & указывать не нужно).

Автор: Zhunko 16.11.2009, 14:06
У меня по разному компилируется без ошибок в VS2008.

Автор: bsa 16.11.2009, 14:08
смени расширение .cpp на .c и попробуй скомпилировать.

Автор: Zhunko 16.11.2009, 14:10
Цитата(bsa @ 16.11.2009,  14:08)
смени расширение .cpp на .c и попробуй скомпилировать.

Понял. Но не буду экспериментировать. smile 
А по существу? Как самым простым способом заполнить строкой третье измерение?

Автор: Zhunko 16.11.2009, 15:13
Код

for (i = 0; i < 10; i++) aIndex[2][3][i] = (short) lpBufTool[i]; // Так тоже не работает.

Автор: ИванМ 16.11.2009, 17:46
Цитата(Zhunko @  16.11.2009,  15:13 Найти цитируемый пост)
код C++1:for (i = 0; i < 10; i++) aIndex[2][3][i] = (short) lpBufTool[i]; // Так тоже не работает.

Как это должно работать, если слева char, справа short?

Автор: Zhunko 16.11.2009, 18:18
Цитата(ИванМ @ 16.11.2009,  17:46)
Цитата(Zhunko @  16.11.2009,  15:13 Найти цитируемый пост)
код C++1:for (i = 0; i < 10; i++) aIndex[2][3][i] = (short) lpBufTool[i]; // Так тоже не работает.

Как это должно работать, если слева char, справа short?

Так это никак не работает!...
Вопрос разве в том, что не работает?
Как сделать, чтобы работало?

То, что показал, это один из неработающих вариантов. В примере явное преобразование типов. Привожу к минимальному целому.

Автор: ИванМ 16.11.2009, 18:24
Zhunko, объясни конкретно что тебе нужно.
То, что ты написал: 
Цитата

Т.е. надо теперь преобразовать буквы в числа char (коды ASCII).

странно. Ведь char и так хранит коды ASCII. Что еще можно преобразовывать?

Автор: Zhunko 16.11.2009, 18:29
Цитата(ИванМ @ 16.11.2009,  19:24)
Zhunko, объясни конкретно что тебе нужно.
То, что ты написал: 
Цитата

Т.е. надо теперь преобразовать буквы в числа char (коды ASCII).

странно. Ведь char и так хранит коды ASCII. Что еще можно преобразовывать?

Да мне тоже странно...
Для двухмерного работает. Для трёхмерного не работает.

Автор: ИванМ 16.11.2009, 18:40
Zhunko, у меня твой код работает. Но в си нет ни ссылок, ни cout.

Добавлено через 4 минуты и 2 секунды
код для c:
Код

#include <stdio.h>
#include <string.h>

void Fun(char aIndex[12][70][10])
 {
  char lpBufTool[10] = "qwertyuio";
  char (*pBufTool)[10];
  int i;
  //----
  strcpy (aIndex[2][3], lpBufTool); 
  strcat (aIndex[2][3], lpBufTool); 
   
  for (i = 0; i < 10; i++) 
      aIndex[2][3][i] = lpBufTool[i]; 
   pBufTool = &aIndex[2][3];
   strcpy (*pBufTool, lpBufTool);
   //----
   printf("%s\n", aIndex[2][3]);
 }

Автор: Zhunko 16.11.2009, 19:10
Причину нашёл!!!
Примеры все мои некорректные!
У меня более сложная адресация в массиве. Вот её не показал.

Так не работает:
Код

for (i = 0; i < 9; i++) aIndex[n][aCount[n]][i] = lpBufTool[i];


Так работает:
Код

b = aCount[n];
for (i = 0; i < 9; i++) aIndex[n][b][i] = lpBufTool[i];


Извините, что напряг. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)