目錄
1、Linux環境下段錯誤的產生原因及調試方法小結
Linux環境下段錯誤的產生原因及調試方法小結
博客園的一篇文章,對段錯誤原因和調試方法講的還不錯
2、Ubuntu重裝桌面以及vbox虛擬機進入命令行
2.1 重裝桌面
sudo apt-get install --reinstall ubuntu-desktop
sudo reboot
2.2 vbox虛擬機進入命令行
vbox如果按ctrl+alt,就會切換到主機下,使用右邊的ctrl(也叫HOST鍵)可以替代這個組合,即按 ‘右ctrl+f1’ 即可。
3、棧、堆和常量區在代碼中的區別
直接上代碼
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define getmem 3 //1,stack; 2,heap; 3,const
#if getmem == 1 //stack
char *GetString(void){
char array[6] = "hello";
return array;
}
#elif getmem == 2 //heap
char *GetString(void){
char *array;
char buf[6] = "hello";
array = malloc(sizeof(buf));
strcpy(array, buf);
return array;
}
#elif getmem == 3 //const
char *GetString(void){
char *array = "hello";
return array;
}
#endif
void main()
{
char *pstr = NULL;
pstr = GetString();
printf("%s\n", pstr);
}
運行會發現
棧在出了函數之後就不可用了,程序運行會出錯
堆和常量,在出了函數後仍可被使用
4、strlen使用注意事項
strlen在沒有發現 \0 前會一直查找下去,然後返回 \0 之前的字符長度。
所以如果用strlen查詢不確定的字符串長度,可能導致意外的無限循環。
5、tcp套接字api調用
6、字符集和字符編碼
字符集(Character set)
字符的集合,每個字符集包含的字符個數不同,常見字符集:
ASCII字符集
GB2312字符集
BIG5字符集
GB18030字符集
Unicode字符集等
字符編碼
比如UTF-8,就是Unicode字符集的編碼方式
二者區別
字符集
是書寫系統字母與符號的集合。
字符編碼
則是將字符映射爲一特定的字節或字節序列,是一種規則。
字符集和字符編碼對應關係
字符集 | 字符編碼 |
---|---|
ASCII | ASCII |
GB2312 | GB2312 |
GBK | GBK |
GB18030 | GB18030 |
Unicode | UTF-8、UTF-16、UTF-32 |
7、cp命令保留文件屬性複製庫鏈接文件
比如拷貝帶有soft-link的so文件時, 加上-d參數就可以保留鏈接文件的屬性了,而不會去複製了鏈接的原始庫文件,命令如下:
cp -d libXXX.so* $DEST_DIR
8、\r\n和CR/LF的意思
\r
是回車,英文是Carriage Return
,簡稱CR
作用:使光標到行首
\n
是換行,英文是New Line
或者是Line Feed
,簡稱LF
,作用:換到新行
9、編譯時庫的鏈接優先級
系統路徑中如果有跟編譯選項-L路徑中的同名庫,哪個更優先呢?優先級如下:
1.編譯目標代碼時指定的動態庫搜索路徑;
2.環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
3.配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;
4.默認的動態庫搜索路徑/lib;
5.默認的動態庫搜索路徑/usr/lib.
同時可以指定程序運行時,從哪個目錄搜索動態庫,具體是用 -rpath
選項,如:
-Wl,-rpath=/mnt/app/
10、curl命令
1、利用curl下載http文件
curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz
可以在http://mirrors.ustc.edu.cn/gnu/windows/emacs/emacs-26/下載文件
2、curl命令詳解,可以參考http://www.linuxdiyf.com/linux/2800.html
11、Linux釋放內存
釋放 echo 3 > /proc/sys/vm/drop_caches
0:0是系統默認值,默認情況下表示不釋放內存,由操作系統自動管理
1:釋放頁緩存
2:釋放dentries和inodes
3:釋放所有緩存
如果現在想讓操作系統重新分配內存,那麼設置drop_caches的值爲0即可
12、關於指針的初始化
如果定義指針的時候,指針指向一個有空間的數據,這時不需要分配空間;
如果要給指針賦值,則需要分配內存空間。
13、xml中node和element的區別
一張圖解釋