C C 中列印函式的乙個小注意點

2021-08-10 11:01:17 字數 1045 閱讀 1790

最近在開發乙個需求的時候,把老**中列印日誌的**拷貝直接拷貝過來。開發完成後測試人員說邏輯是正常的但是日誌有些奇怪。

一、c/c++中的列印問題

出現錯誤邏輯**如下:

1、數值型別不匹配

snprintf(szremark, sizeof(szremark) - 1, "資金賬戶:%d", llcuacctcode);
其中llcuacctcode是long long型別,輸入了1989061819891,結果卻列印了491961843。從結果來看。是因為輸入的值溢位了導致結果異常。統一的如果long long型別的數值輸入乙個很小的值,也可能會列印出乙個不一樣的結果。

2、要列印字串,輸入數值會導致程式code

比如:

int i = 100;

printf("i is %s\n", i);

這段**可能導致程式code

在使用c/c++列印函式的時候,需要檢查型別是否匹配。避免由於型別不匹配導致亂七八糟的結果。

二、測試在golang中看看是否存在列印問題

1、在golang中試試型別不匹配的結果:

var i int = 100

fmt.printf("i is %s", i)

輸出

i is %!s(int=100)
2、數值型別不匹配

var i int64 = 1989061819891

fmt.printf("i is %d", i)

結果

i is

1989061819891

總結,在golang中即使數值型別輸入出錯,也可以看到正常的結果,也不會使服務code。但是為了**的嚴謹性,對於列印函式,要做到型別匹配。

fclose函式的乙個注意點

fclose是乙個函式名,功能是關閉乙個流。注意 使用fclose 函式就可以把 緩衝區內最後剩餘的資料輸出到核心緩衝區,並釋放 檔案指標和有關的緩衝區。函式原型 int fclose file fp 返回值 如果流成功關閉,fclose 返回 0,否則返回eof 1 如果流為null,而且程式可以...

C C 中的scanf函式的使用注意點

要求是使用scanf輸入三個整型值,再依次輸出輸入的整型值。剛開始思路就是簡單定義三個整型變數,用scanf簡單將輸入值暫存輸出即可,和運 況如下 這裡,敲完 顯示scanf語句中的三個變數在這裡未初始化,嘗試除錯執行,情況如下 經查閱,得知scanf函式,與printf不同的是它要存入輸入值的位址...

使用列舉型別的乙個注意點

申明 本人菜鳥 以下總結屬於菜鳥級總結,大牛走開!shock shock 對於列舉型別,有一點需要非常注意 可以在其中定義陣列常量,但是最好不要在使用內部建構函式時使用這些陣列常量,因為此時這些陣列常量可能尚未初始化,估計是由於初始化順序的問題。對於以下程式,我在debug時發現,當這些列舉型別呼叫...