原创 又踩到字符串的坑了

今天,又一次被C/C++中的字符串給坑了。當然,是自己挖的坑。 聽到字符串,學習C/C++的小夥伴們的第一想法是不含特殊字符的字符數組,譬如包含0-9/a-zA-Z的字符數組。 維基百科對字符串的定義是:字符串(英語:string),是由

原创 CryptAcquireContext返回NTE_BAD_KEY_STATE

我們知道,通過rand函數產生的隨機數安全性不高,爲了保證隨機數的安全性,我們一般會選擇一個隨機數種子,通過該種子增加破解隨機數的難度。C/C++下是如下代碼: #include <stdlib.h> #include <time.h>

原创 Windows下動態庫符號命名規則

C的名稱修飾規則 1. 對於使用C調用協議(__cdecl)的函數,在函數名稱前加一下劃線,不考慮參數和返回值 2. 對於使用快速調用協議(__fastcall)的函數,在函數名稱前後各加一@符號,後跟參數的長度,不考慮返回值。例如ext

原创 聽說,有些網站明文存儲用戶密碼?

前段時間爆出 Facebook 明文存儲用戶密碼,多達 6 億用戶,而它的用戶總數是 27 億,佔比 22 % 。 看到這個消息,是不是很震驚? 無獨有偶,之前有聽過很多銀行系統的密碼也是明文(真假沒有驗證)。 在讀書時,忘記學校網站密碼

原创 GDB常用調試指令

編譯程序時需要加上-g,之後才能用gdb進行調試:gcc -g main.c -o main   常用命令 回車鍵:重複上一命令 (gdb)help:查看命令幫助,具體命令查詢在gdb中輸入help + 命令,簡寫h (gdb)run:重

原创 棧上分配內存函數Alloca

對於堆上內存分配函數,大家都比較熟悉。對於C而言,有calloc、malloc、realloc函數;對於C++而言,有new、new[]。 之前一直以爲alloca函數也是堆上分配內存的函數,因爲它和calloc及malloc太像了。並且

原创 Golang遍歷目錄下的文件

package main import ( "fmt" "io/ioutil" "log" "path/filepath" ) func ListDir(folder string) { files, errDir :=

原创 Golang 文件讀寫操作

package main import ( "fmt" "io" "log" "os" "path/filepath" "strconv" ) func main() { // 獲取程序目錄 strDir, errD

原创 Golang 獲取執行文件所在目錄

有如下幾種方法: func getExecutePath1() string { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { fmt.Pr

原创 代碼中的那些偷懶

在開發新功能,維護老功能,或者重構優化前人的代碼時,不知有沒有踩過坑,或者覺得前人爲了偷懶而使用了很多不可持續的方法。 業務逐漸豐富後,代碼也日益複雜。複雜的代碼維護成本很高:看的時候很費時間,改的時候也戰戰兢兢的。所以,爲了少犯錯,就很

原创 談談測試和代碼質量

畢業找工作那會,有個開發的同學被分配去做測試,當時很不理解。爲什麼他平時都是用 Java,怎麼去做測試呢?當時對測試的認知就是點點點。 在工作一段時間後,對於測試依然有一定程度的偏見。爲什麼有偏見,還不是因爲無知!人類對於不瞭解的東西,很

原创 Linux下tar.xz文件解壓方法

對於tar.xz文件,有如下兩種方法(假設文件是a.tar.xz): 方法1: 1. xz -d a.tar.xz,得到a.tar文件 2. tar -xvf  a.tar:對a.tar文件進行解壓   方法2: tar xvJf  a.

原创 DHCP 原理及抓包分析

目錄 1. DHCP 簡介 1.1 DHCP 作用 1.2 DHCP 工作機制 2.  DHCP 交互流程 2.1 正常交互流程 2.2 租約 2.3 客戶端狀態機 2.4 參數配置 3.  DHCP 報文 3.1 報文類型 3.2 報文

原创 通過Git上傳本地文件到GitHub

1. 安裝Git 2. 打開Git-Bash 3. 配置用戶名及郵箱 4. 設置SSH key 先查看是否有SSH key 如果沒有,那麼生成一個(郵箱爲github賬戶對應的郵箱) 5. 爲github賬號配置ssh key

原创 通過Git更新代碼到GitHub

第一步:查看當前的git倉庫狀態 git status 第二步:更新全部 git add * 第三步:Commit git commit -m "更新說明" 第四步:拉取當前分支最新代碼 git pull 第五步:push