Рассмотрим следующий код:Почему mblen() всегда возвращает 1?
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
#define MAX 64
void main(void)
{
char napis[] = "coś żółtego";
int i;
wchar_t bufor[MAX];
int ret;
setlocale(LC_CTYPE, "");
printf("zwykły string [%s] długość %d\n", napis, mblen(napis, MAX)); // <---
ret = mbstowcs(bufor, napis, sizeof bufor);
if (ret == MAX)
bufor[MAX-1] = '\0';
if (ret > 0)
{
printf("16 bitowy string: [%ls] długość napisu %d długość %d\n", bufor, mblen(napis, MAX), ret);
for(i = 0; i < ret; i++)
printf("%lc|", bufor[i]);
printf("\n");
}
}
Когда код с gcc -o file file.c
и запустить его, я всегда получаю 1 из mblen()
. Почему это происходит?
Все остальное отлично работает, но mblen()
нет.
Я пытался использовать LC_ALL, но ничего не изменилось.
i get mblen() = 2 ;-) –
Да, вы получаете 2, другими словами: 'mblen' не возвращает длину строки, а длину первого многобайтового символа. –