明明不是程序员,但是还老是关心一些跟本身无关的东西。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调试程序