C閒雜筆記

2021-09-25 08:27:16 字數 3567 閱讀 2389

在vs中呼叫 strcpy、strcat 等函式時會提示 _crt_secure_no_warnings 警告,原因是這些函式不安全,可能會造成記憶體洩露等。

所以建議採用帶_s的函式,如strcpy_s,calloc_s。

當然,如果執意使用老版本、非安全版本函式,可以使用 「_crt_secure_no_warnings」 標記來忽略這些警告問題。

最頂部定義

#define _crt_secure_no_warnings

或操作 vs 中,在專案 -> 屬性 -> c/c++ -> 預處理器 -> 預處理器定中新增 _crt_secure_no_warnings 這個預定義。

轉換說明

輸出%a,%a

浮點數、十六進製制數和p-計數法(c99)

%c乙個字元

%d有符號十進位制數

%e,%e

浮點數,e計數法

%f浮點數,十進位制計數法

%g,%g

根據數值不同自動選擇%f或%e,%e格式在指數小於-4或者大於等於精度時使用

%i有符號十進位制整數(與%d相同)

%o無符號八進位制整數

%p指標

%s字串

%u無符號十進位制數

%x,%x

使用十六進製制數0f的無符號十六進製制整數

%%列印乙個百分號

prinf()修飾符

修飾符意義

標誌五種標誌將在後面的表中說明,可以使用零個或者多個標誌示例: "%-10d"

digit(s)

字段寬度的最小值。如果字段不能容納要列印的數或者字串,系統會使用更寬的字段示例: "%4d","%10s"

.digit(s)

精度.對於%e,%e和%f轉換,是將要在小數點的右邊列印的數字的位數。對於%g和%g轉換,是有效數字的最大位數。對於%s轉換,是將要列印的字元的最大數目。對於整數轉換,是將要列印的數字的最小位數。如果必要,要使用前導0來達到位數。只使用"."表示其後跟隨乙個0,所以%.f和%.0f相同示例: "%5.2f"表示列印乙個浮點數,它的字段寬度為5個字元,小數點後有兩個數字

h和整數轉換說明符一起使用,表示乙個short int或unsigned short int型別數值示例: "%hu", "%hx", "%6.4hd"

hh和證書轉換說明符一起使用,表示乙個signed char或unsigned char型別數值

j和整數轉換說明符一起使用,表示乙個intmax_t或uintmax_t值示例: "%jd","%8jx"

l和整數轉換說明符一起使用,表示乙個long int或unsigned long int型別值

ll和整數轉換說明符一起使用,表示乙個long long int或unsigned long long int型別值(c99)示例: "%lld","%8llu"

l和浮點數轉換說明符一起使用,表示乙個long double值示例: "%lf", "%10.4le"

t和整數轉換說明符一起使用,表示乙個ptrdiff_t值(與兩個指標之間的差相對應的型別)(c99)示例: "%td", "%1ti"

z和整數轉換說明符一起使用,表示乙個size_t值(sizeof返回的型別)(c99)示例: "%zd","%12zx"

printf()的標誌

標誌意義

-專案左對齊,即,會把專案列印在字段的左側開始處示例: "%-20s"

+有符號的值若為正,則顯示帶加號的符號;若為負,則顯示帶減號的符號示例: "%+6.2f"

(空格)

有符號的值若為正,則顯示時帶前導空格(但是不顯示符號);若為負,則帶減號符號。+標誌會覆蓋空格標誌示例: "% 6.2f"

#使用轉換說明的可選形式。若為%o格式,則以0開始;若為%x和%xgeshi ,則以0x或0x開始。對於所有的浮點形式,#保證了即使不跟任何數字,也列印乙個小數點字元。對於%g和%g格式,它防止尾隨0被刪除示例: "%#o", "%#8.0f", "%+#10.3e"

0對於所有的數字格式,用前導零而不是空格填充字段寬度。如果出現-標誌或者指定了精度(對於整數)則忽略該標誌示例: "%010d", "%08.3f","%02x"

端模式(endian)的這個詞出自jonathan swift書寫的《格列佛遊記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian(這句話最為形象)。小人國的內戰就源於吃雞蛋時是究竟從大頭(big-endian)敲開還是從小頭(little-endian)敲開。

在計算機業big endian和little endian也幾乎引起一場戰爭。在計算機業界,endian表示資料在儲存器中的存放順序。下文舉例說明在計算機中大小端模式的區別。

如果將乙個32位的整數0x12345678存放到乙個整型變數(int)中,這個整型變數採用大端或者小端模式在記憶體中的儲存由下表所示。為簡單起見,本文使用op0表示乙個32位資料的最高位元組msb(most significant byte),使用op3表示乙個32位資料最低位元組lsb(least significant byte)。

位址偏移

大端模式

小端模式

0x00

12(op0)

78(op3)

0x01

34(op1)

56(op2)

0x02

56(op2)

34(op1)

0x03

78(op3)

12(op0)

如果將乙個16位的整數0x1234存放到乙個短整型變數(short)中。這個短整型變數在記憶體中的儲存在大小端模式由下表所示。

位址偏移

大端模式

小端模式

0x00

12(op0)

34(op1)

0x01

34(op1)

12(op0)

由上表所知,採用大小模式對資料進行存放的主要區別在於在存放的位元組順序,大端方式將高位存放在低位址,小端方式將高位存放在高位址。採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理。到目前為止,採用大端或者小端進行資料存放,其孰優孰劣也沒有定論。

有的處理器系統採用了小端方式進行資料存放,如intel的奔騰。有的處理器系統採用了大端方式進行資料存放,如ibm半導體和freescale的powerpc處理器。不僅對於處理器,一些外設的設計中也存在著使用大端或者小端進行資料存放的選擇。

因此在乙個處理器系統中,有可能存在大端和小端模式同時存在的現象。這一現象為系統的軟硬體設計帶來了不小的麻煩,這要求系統設計工程師,必須深入理解大端和小端模式的差別。大端與小端模式的差別體現在乙個處理器的暫存器,指令集,系統匯流排等各個層次中。

【用函式判斷系統是big endian還是little endian】

//如果位元組序為big-endian,返回true;

//反之為 little-endian,返回false

bool isbig_endian()

//isbig_endian()

附:

大小端的分度值是 byte,即每乙個byte都是按照正常順序,但是byte組裝成乙個int 或者是 long等時每個byte的擺放位置不同

jquery閒雜筆記

1 1 執行效率是編寫指令碼的第一要務 2 理解jquery設計模式和工作機制是學習和提公升jquery開發水平的關鍵。2 dom是html和xml的應用程式設計介面 api 3 getelementbytagname 獲得乙個陣列 和getelementbyid 是dom模型提供的內建方法。4 h...

一周閒雜感想 by Ivan

經過一番努力,我的電腦終於可以上網了。之前一直是在win2000下,由於重灌的時候沒有覆蓋,現在2000和xp共存。現在我正在xp下上網。不過由於2000還在,計畫寫完後再重新裝一下。得知彭同學要去安徽了,不由小小遺憾下。我是安徽出生的,今年暑假路過安徽卻沒回家。現在,林同學在嘉定,李同學在河南,彭...

C語言筆記(C )

結構體,類在定義時沒分配空間,用其定義變數時才會分配空間,所以c語言在的結構體不用有靜態型別,因為靜態型別在資料段,而如果在函式用用結構體定義變數,這變數在棧中,這樣就衝突了,但在c 中有相應的機制處理些問題。c 的cin.get 不讀取緩衝區中的回車字元,而cin.getline 將緩衝區中的回來...