URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2060
[ Назад ]

Исходное сообщение
"iconv(3) ?"

Отправлено DmitryvMuha , 10-Сен-03 09:20 
вобщем хочу функцию которая бы перекодировала, из кои8 в юникод.
Написал ее с использованием iconv
вот код:
#include <iconv.h>
char* ConvertString( char source[])
{
unsigned int ilen, olen;
char *ibuf, *obuf;
char buf [25];
iconv_t iopen;
iopen = iconv_open ( "UTF-8", "KOI8-R");
olen =ilen=strlen(source)+1;
obuf = (char *)&buf;
ibuf = (char *)source;
strcpy ( buf, source );
if ( iopen != (iconv_t)(-1) )
iconv ( iopen, &ibuf, &ilen, &obuf, &olen );
strcpy ( source, buf );
iopen = iconv_close;
return ( source );
}
main(void)
{
printf (ConvertString("привет")); //слово привет в koi8

}

при компиляцмм сказал следующее:
"i.c:20:warning:passing arg 2 of 'iconv'from incompatible pointer type"

но откомпилял

после запуска грит следуещее
"Segmentation fault"

Не ругайте в линухе и в си я не АС, подскажите где косяк?


Содержание

Сообщения в этом обсуждении
"iconv(3) ?"
Отправлено Алексей , 10-Сен-03 10:33 

>unsigned int ilen, olen;
>char *ibuf, *obuf;
>char buf [25];

>obuf = (char *)&buf;
А помоему грабли здесь.
надо
obuf = (char*)buf;
а если как ты написал то
obuf = (char*)&buf[0];


"iconv(3) ?"
Отправлено DmitryvMuha , 10-Сен-03 12:08 
>>obuf = (char *)&buf;
>А помоему грабли здесь.
>надо
>obuf = (char*)buf;
>а если как ты написал то
>obuf = (char*)&buf[0];

попробывал итак и так не работат, тоже самое пишет


"iconv(3) ?"
Отправлено Алексей , 10-Сен-03 12:21 
>попробывал итак и так не работат, тоже самое пишет
в смысле Segmentation Fault или про поинтеры?
С поинтерами там все понятно.
я думаю, что
iconv ( iopen,(char*)&ibuf,(size_t*)&ilen,(char*)&obuf,(size_t*)&olen );
решит проблему warning-a

"iconv(3) ?"
Отправлено Алексей , 10-Сен-03 12:24 
>попробывал итак и так не работат, тоже самое пишет
Ан нет!
Всему виной вот это.
conv ( iopen, &ibuf, &ilen, &obuf, &olen );
strcpy ( source, buf );
Дело в том, что вызов ты делаешь так:
printf (ConvertString("привет")); //слово привет в koi8
Соотвествено, если мне не отшибает память, такая
строка попадат в данные, которые нельзя перезаписывать.
и если ты вызовешь, скажем так
printf (ConvertString(strdup("привет")));
то скорее всего все будет хорошо.....

Кажется...



"iconv(3) ?"
Отправлено DmitryvMuha , 10-Сен-03 12:43 
спасиба огромное все работает