明明不是程序員,但是還老是關心一些跟本身無關的東西。html
一、常見庫linux
Linux下進行純C語言進行開發經常使用的庫有:GNU C Library(glibc),包括標準庫(ANSI C99)及Posix等標準庫的實現,是編程進行的必需保證;GNULib(The GNU Protability library),提供了跨平臺的常見庫支持,包括ANSI C,Posix的實現,以及一些常見功能的擴展,能夠在MinGW、Mac OS、glibc(Linux)下使用,其中Linux下coreutils的實現就用到了GNUlib;glib是GTK+的一部分,也能夠單獨使用,提供了常見算法、數據結構、IO等功能的實現和封裝。程序員
二、字符編碼算法
編程中常常遇到編碼的問題,世界的語言多種多樣,想要統一進行表示太過困難了,因而不一樣時期出現不一樣的解決方法。shell
在Windows下經常使用的Unicode編碼爲cp936(也是GBK),在Linux下則爲UTF-8(具體一點說是:zh_CN.UTF-8)。編程
在C語言進行編碼時,可使用char[]直接指向一箇中文字符串而且利用printf函數正確輸出,可是此時的輸出正確與否取決於console的編碼。若是c源程序的編碼和console編碼同樣,則輸出正確。這是由於printf直接輸出了字符串的字節碼(utf-8或gbk)並被console正確解釋。可是此時使用len取得的不是字符串裏中文的長度,而是中文編碼的長度。數據結構
若是要正確處理中文字符串,則須要使用寬字符串。只使用標準庫的話,須要使用<string.h>,<wchar.h>,<locale.h>。函數
/*這是一個使用utf-8編碼保存的文件,用來解釋本身對編碼的疑惑*/ #include<stdio.h> #include<wchar.h> #include<string.h> #include<locale.h> int main(int argc, char *argv[]) { setlocale(LC_CTYPE,""); wchar_t myUnistring[]=L"中文字符串嘛"; wprintf(L"%ls\n",myUnistring); return 0; }
首先使用setlocale設定本地編碼,而後使用wprintf輸出。post
開始時怎麼也沒法獲得正確輸出,後來查資料才發現,wprintf不能和printf一塊兒使用,不然沒法獲得正確輸出。編碼
然則,在使用man查看wprintf用法時,發現Linux下不推薦使用這種方法,編譯後的程序在不一樣平臺運行仍是可能獲得亂碼輸出,推薦使用gettext方法。
另外還可使用ICU庫(IBM開發)或者使用glib對gettext的封裝。
|
參考:
[4]用GDB調試程序