C語言scanf讀取中文時一些注意事項


下面程序所運行的命令行界面的編碼是GBK(代碼頁:936 簡體中文 GBK

 

char s[10];

scanf("%s",s); //輸入“你好啊”,然后回車

printf("%s",s); //能正確輸出“你好啊”

使用調試工具查看s所在的內存空間:

c4 e3 ba c3 b0 a1 00 00 00 00

百度查詢可知“你好啊”的GBK的編碼是:

你:C4E3

好:BAC3

啊:B0A1

發現和數組s的前6個字節存儲的值一樣,由此可知,程序所運行的命令提示符支持哪種編碼,那么C可以正確存儲和輸出這種編碼的字符。

 

char ch;

scanf("%c",&ch); //輸入“你”,然后回車

使用調試器查看變量ch所在的內存空間:c4

scanf%c表示讀取一個字符,更確切的說是讀取輸入緩沖區的一個字節。

 

int ch;

scanf("%c",&ch); //輸入“你”,然后回車

使用調試器查看變量ch所在的內存空間:c4 00 00 00

雖然int4個字節,但是scanf%c只讀取一個字符(字節),所以把讀取的0xc4賦值給整型變量chch的值就是0xc4,而內存是小端表示,便是c4 00 00 00

同時,上面的scanf會出現編譯時警告:warning: format '%c' expects argument of type 'char *', but argument 2 has type 'int *' [-Wformat=]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM