[英]Why mblen() always returns 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
運行時,我總是從mblen()
獲得1。 為什么會發生?
其他所有內容都可以正常運行,但是mblen()
不能。
我嘗試使用LC_ALL,但沒有任何更改。
因為"coś żółtego"
"c"
中的第一個"c"
只有1個字節
mblen()函數檢查從s開始的多字節字符串中最多n個字節,並提取下一個完整的多字節字符 。
更改為“żośżółtego”,然后看看會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.