Имеется код:
Код: Выделить всё
#include <stdio.h>
#include <iconv.h>
#include <errno.h>
#include <err.h>
int main() {
iconv_t cd;
size_t k, f, t;
int se;
char code[10];
char buf[100];
bzero(code,10);
bzero(buf,100);
FILE *file = fopen("myfile", "r");
fseek (file , 0 , SEEK_END);
size_t fsize = ftell (file);
rewind (file);
fread (code,1,fsize,file);
fclose(file);
const char* in = code;
const char* out = buf;
cd = iconv_open("CP1251", "UTF-8");
if( cd == (iconv_t)(-1) )
err( 1, "iconv_open" );
f = strlen(code);
t = sizeof buf;
errno = 0;
k = iconv(cd, &in, &f, &out, &t);
se = errno;
printf( "converted: %u,error=%d\n", (unsigned) k, se );
iconv_close(cd);
return 0;
}при запуске выводит такое:
Код: Выделить всё
converted: 4294967295,error=84при компиляции выдает:
Код: Выделить всё
test.c: В функции ‘main’
test.c:12: предупреждение: incompatible implicit declaration of built-in function ‘bzero’
test.c:28: предупреждение: incompatible implicit declaration of built-in function ‘strlen’
test.c:31: предупреждение: passing argument 2 of ‘iconv’ from incompatible pointer type
test.c:31: предупреждение: passing argument 4 of ‘iconv’ from incompatible pointer typeСобственно, в чем проблема?
PS: myfile - файл в кодировке cp1251, содержащий слово "привет"
PPS: если поменять UTF-8 на KOI8-R - конвертит нормально
PPPS: код ошибки EILSEQ(84) означает "на входе для обработки находится неправильная многобайтовая последовательность"
Всем заранее спасибо за помощь