Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Работа с указателем на void *


Автор: ulcigor 13.5.2009, 08:13
Добрый всем день. Помогите пожалуйста вот по какому вопросу.
Имеется некая функция:
Код


void* str_replace( const char str[] )
{
  /*Тут бла-бла-бла*/
  не буду описывать... .
  char string[10][30];
  /*Тут заполняется значениями*/
  void *point;
  point = string;
  
  return point;
}

int main( int argc, char *argv[] )
{
  /*Пытаемся достать указатель*/
  void *str = str_replace( "Hello world" ); //Предположим
  printf( "%s", ((char *)str)[0] ); //Выводит первую букву, первого массива... .
  /*А как достать все строки???*/
  return 0;
}


Пожалуйста помогите!!!

Автор: Rickert 13.5.2009, 09:53
ulcigor, char string - локальная переменная и будет уничтожена после завершения функции. Если вы будете возвращать указатель на неё, то он будет указывать на место, где строки уже нет - она удалена.

Автор: zim22 13.5.2009, 10:05
Код

#include <cstdio>
#include <cstring>

void** str_replace( const char str[], int &size )
{
  /*Тут бла-бла-бла*/
//  не буду описывать... .
  const int cSize = 3;
  size = cSize;

  static char string[cSize][30];
  /*Тут заполняется значениями*/
  strcpy(string[0], "hello");
  strcpy(string[1], "my");
  strcpy(string[2], "friend");
  static void *ptrarray[] = {&string[0][0], &string[1][0], &string[2][0]};
  return ptrarray;
}

int main( int argc, char *argv[] )
{
  /*Пытаемся достать указатель*/
  int size = 0;
  void *str = str_replace( "Hello world", size ); //Предположим  
  /*А как достать все строки???*/
  char **res = (char**)str;
  
  char *str1 = res[0]; // hello
  char *str2 = res[1]; // my
  char *str3 = res[2]; // friend

  return 0;
}


Автор: ulcigor 13.5.2009, 18:31
Ого. Спасибо большое.

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