2014-03-31 44 views
1

btowc(3)區域依賴性?我認爲用LANG=en_US.iso88591它會返回一些歐洲字符的128到255之間的字節,但它返回WEOF。btowc(c)總是返回(c在0..127?c:WEOF)嗎?

$ printf '\xFF\n' | iconv -f iso88591 
ÿ 
$ LANG=en_US.iso88591 ./a.out 
255 -1 

_

int main() { 
    int i = 0xFF; 
    printf("%d %d\n", i, btowc(i)); 
} 

回答

1

在我的系統反正會:

#include <locale.h> 

//... 

setlocale(LC_CTYPE, "en_US.iso88591"); 

使輸出爲255 255。所以這表明它似乎是依賴於語言環境的,儘管C標準沒有明確地說它是,就我所知而言。 (它說mbs*函數系列是依賴於語言環境的,但對btowc沒有這樣說)。

你的文章看起來像你期待LANG環境變量改變setlocale在程序啓動時完成的方式。該變量影響gcc如何讀取您的源文件,但可能它沒有任何運行時間效果。 C標準說,所有程序都啓動在區域C

+0

在Visual Studio中? – basin