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


Автор: s_a_s_h_a 25.11.2005, 09:07
Необходимо использовать библиотеку libiconv для перекодировки текста. Не получается...
Не понимаю работы этой библиотеки. В ней есть всего 3 нужных функции.

iconv_t iconv_open (const char* tocode, const char* fromcode);

size_t iconv (iconv_t cd, const char* * inbuf, size_t * inbytesleft, char* * outbuf, size_t * outbytesleft);

int iconv_close (iconv_t cd);

траблы с использованием второй функции.

Вот кусок кода

Код

  iconv_t cd;
  size_t *length;
  char **textin;
  char **textout, *tempstr;
  tempstr = textbuf->text();
  int i = 0;
  int k = 0;
  int l = 0;
  while(tempstr[i] != '\0')
    { if(tempstr[i] == '\n')
       { textin[k][l] = '\0'; k++; length[k] = l; l = 0;}
      else
       { textin[k][l] = tempstr[i]; l++; i++;} 
    }
  cd = iconv_open ("CP866", "CP1251");  
  iconv (cd,textin, length, textout, length);  
  iconv_close (cd);


компилятор, естественно, ругается:
invalid conversion from 'char**' to 'const char**'. А я не понимаю, как я могу использовать не константу, если пользователь может поменять текст.

Подскажите, пожалуйста, что надо сделать, чтобы все заработало или расскажите как надо юзать эту библиотеку. /*Если можно, с примером кода*/

Автор: Neitron 25.11.2005, 10:53
Не думаю что это правильный подход, но помочь вроде должно.

Код

  iconv_t cd;
  size_t *length;
  char **textin;
  char **textout, *tempstr;
  tempstr = textbuf->text();
  int i = 0;
  int k = 0;
  int l = 0;
  while(tempstr[i] != '\0')
    { if(tempstr[i] == '\n')
       { textin[k][l] = '\0'; k++; length[k] = l; l = 0;}
      else
       { textin[k][l] = tempstr[i]; l++; i++;} 
    }
  cd = iconv_open ("CP866", "CP1251");  
  const char** str = textin;
  iconv (cd,str, length, textout, length);  
  iconv_close (cd);

Автор: s_a_s_h_a 25.11.2005, 15:57
так будет ругаться теми же словами на 16-ой строке.

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