簡體   English   中英

我如何使用mblen()?

[英]How do I use mblen()?

這里有一些測試代碼可以幫助我理解多字節字符管理。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char * line = malloc(1024);
    size_t n;

    getline(&line, &n, stdin);
    while (*line) {
        int offset = mblen(line, strlen(line));
        if (offset == -1) return 0;
        printf("%d\n", offset);
        line += offset;
    }
    return 0;
}

據我了解,如果用戶在哪里輸入“éléphant”,我的輸出應該顯示2 1 2 1 ...但是,它顯示-1表示mblen錯誤,從第一個字節開始。 我收集它可能不是這兩行代碼中的錯誤,我必須做什么,我可以閱讀哪些資源,以獲得這里發生的事情的暗示? 當然printf(“%s”,line)可以正常工作(並且確實)。

將我的評論轉化為答案。

細節可能取決於您的確切執行環境,但我認為以下內容適用於大多數* NIX系統。

mblen取決於當前的語言環境

此函數的行為受當前語言環境的LC_CTYPE類別的影響

啟動時的默認語言環境是“C”語言環境(請參閱setlocale ),它可能與您期望的不匹配。 方便的是,您可以調用setlocale(LC_CTYPE, "")將語言環境設置為“本機”環境。

請注意,調用setlocale(LC_ALL, "") (正如我最初寫的那樣)會改變您可能期望的更多內容,因此在執行此操作之前,請務必閱讀與語言環境相關的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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