簡體   English   中英

為什么mblen()總是返回1?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM