The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как определить массив "
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как определить массив "
Сообщение от forfreeuse emailИскать по авторуВ закладки on 03-Июл-03, 13:29  (MSK)
Имеется указатель (*k) на память выделенный malloc.
Хочеться работать с этой памятью как с массивом k[x][100], то еть обращатся так
sprintf(k[10],"test");

как сказать на сях, что это память являеться массивом?

#include <stdlib.h>

int main(void)
{
int z,size=100000;
char *k;

k=(char*)malloc(size*100+1);
if  (k==NULL) {printf("Can't allocate memory\n"); exit(-1);}

sprintf(k[10],"test");

return (0);
}


  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как определить массив "
Сообщение от pth Искать по авторуВ закладки on 03-Июл-03, 13:54  (MSK)
>Имеется указатель (*k) на память выделенный malloc.
>Хочеться работать с этой памятью как с массивом k[x][100], то еть обращатся
>так
>sprintf(k[10],"test");

Не надо этого хотеть.

>как сказать на сях, что это память являеться массивом?

Не надо этого говорить.

>
>#include <stdlib.h>
>
>int main(void)
>{
> int z,size=100000;
> char *k;
>
> k=(char*)malloc(size*100+1);
> if  (k==NULL) {printf("Can't allocate memory\n"); exit(-1);}
>
> sprintf(k[10],"test");

sprintf(k + 10 * 100, "test"); /* Не надо так делать */

>
> return (0);
>}

Если пока не умеешь работать с памятью - воспользуйся чем-нибудь вроде libslack ( http://libslack.org )

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как определить массив "
Сообщение от forfreeuse emailИскать по авторуВ закладки on 03-Июл-03, 13:58  (MSK)
Так не надо, этак нельзя, а как можно?
(без использования дополнительных библиотек)

>>Имеется указатель (*k) на память выделенный malloc.
>>Хочеться работать с этой памятью как с массивом k[x][100], то еть обращатся
>>так
>>sprintf(k[10],"test");
>
>Не надо этого хотеть.
>
>>как сказать на сях, что это память являеться массивом?
>
>Не надо этого говорить.
>
>>
>>#include <stdlib.h>
>>
>>int main(void)
>>{
>> int z,size=100000;
>> char *k;
>>
>> k=(char*)malloc(size*100+1);
>> if  (k==NULL) {printf("Can't allocate memory\n"); exit(-1);}
>>
>> sprintf(k[10],"test");
>
>sprintf(k + 10 * 100, "test"); /* Не надо так делать */
>
>
>>
>> return (0);
>>}
>
>Если пока не умеешь работать с памятью - воспользуйся чем-нибудь вроде libslack
>( http://libslack.org )


  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как определить массив "
Сообщение от David emailИскать по авторуВ закладки on 03-Июл-03, 22:51  (MSK)
int main (void)
{
  int
    z,
    size   = 100000,  // количество строк в массиве
    maxlen = 100;     // максимальная длина строки с ноликом

  char **k;           // массив строк

// выделяем память по массив указателей
  k = (char**) malloc (size * sizeof (char*));
  if  (k == NULL)
  {
    printf ("Out of memory\n");
    exit (-1);
  }
  bzero (k, size * sizeof (char*));

// выделяем память для каждой строки
  for (int i = 0; i < size; i++)
  {
    k[i] = (char*) malloc (maxlen * sizeof (char));
    if  (k[i] == NULL)
    {
      printf ("Out of memory\n");
      exit (-1);
    }
  }

  snprintf (k[10], maxlen, "test");

// освобождаем память
  for (int i = 0; i < size; i++)
  {
    if (k[i]) {
      free (k[i]);
    }
  }
  free (k);

  return (0);
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру