Заполнение значений в массив указателей - PullRequest
0 голосов
/ 28 июля 2011

В последнее время я взялся за задачу, чтобы понять и выучить C. Прямо сейчас я изучал структуры и массивы указателей.У меня проблема.Я хочу заполнить массив указателей значениями.Ниже мой код:

           struct profile_t 
          {
           unsigned char length;
           unsigned char type;
           unsigned char *data;
          };

          typedef struct profile_datagram_t
         {
          unsigned char src[4];
          unsigned char dst[4];
          unsigned char ver;
          unsigned char n;
          struct profile_t profiles[MAXPROFILES];       
         } header;

          header outObj;

         int j =0;
         int i =0;

      outObj.profiles[j].data = malloc(10);

      for(i=0;i<10;i++)
          {
         if (j=0)
             {
           outObj.profiles[j][i] = 1 2 3 4 5 6 7 8 9 10;
         }
         else 
             {
        j=1;
         }
      }

      for(i=0;i<10;i++)
          {
        if (j=1)
            {
           outObj.profiles[j][i] = 1 2 3 4 5 6 7 8 9 10;
        }
      }

Является ли вышеприведенный подход подходом или я полностью сбился с пути.MAXPROFILES равен 2 (что означает только 0 и 1).

Ответы [ 3 ]

1 голос
/ 28 июля 2011

Вы не можете назначить таким образом

outObj.profiles[j][i] = 1 2 3 4 5 6 7 8 9 10;

outObj.profiles[j] является экземпляром profile_t.outObj.profiles[j].data это символ *.Я полагаю, что вы хотите присвоить эти целые данные.Прежде всего вы должны выделить память для обоих значений j.

outObj.profiles[0].data = malloc(10);
outObj.profiles[1].data = malloc(10);

Я предлагаю вам заменить ваш код циклами на что-то вроде этого

for(i=0;i<10;i++) {
    outObj.profiles[0].data[i] = i+1;
    outObj.profiles[1].data[i] = i+1;
}

Результат такой же, но этонамного чище читать и понимать.

0 голосов
/ 28 июля 2011

Вы не выделяете место для outObj.profiles[1].data.

Последовательность чисел (1 2 ... 10) является синтаксической ошибкой. Вы можете использовать переменную цикла

for (i = 0; i < 10; i++) {
    outObj.profiles[0][i] = i + 1;
}
0 голосов
/ 28 июля 2011

Или коротко:

#define DATALENGTH 10

uint actProfile = 0;
uint actData = 0;



for( actProfile = 0; actProfile < MAXPROFILES; ++actProfile )
{
    outObj.profiles[actProfile].data = malloc(DATALENGTH);

    //skip check if malloc was successfull...

    for ( actData = 0; actData < DATALENGTH; ++actData )
    {
      outObj.profiles[actProfile].data[actData] = actData +1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...