C sscanf 的返回值

2021-09-28 14:15:01 字數 1453 閱讀 4306

sscanf() 的返回值,舉例來說

int cnt;

char str[

256]=""

;if(!

sscanf

(str,

"cnt = %d"

,&cnt)

)return;if

(cnt ==0)

return

;float

* point =

newfloat

[cnt]

;

結果,崩潰,backtrace 顯示崩潰在 new 操作上。如果打 log,可知,cnt 可能為負值。因此,int cnt = 0;宣告即賦值是個好主意。

但是,因為sscanf 在當 str 是空字串時,返回值為 -1,而 所有非 0 int 均為 true,因此 -1 取非值為 false,所以中間那個 if 語句也沒能攔住這次崩潰。

因此,這段**最好這麼寫

int cnt =0;

char str[

256]=""

;if(sscanf

(str,

"cnt = %d"

,&cnt)

<=0)

return;if

(cnt ==0)

return

;float

* point new

float

[cnt]

;

在這種情況下,

str = "cnt = 3"時,sscanf的返回值為 1,

str = "something else"時,sscanf的返回值為0,

str = "cnt = 3 cnt = 3 cnt = 4"時,sscanf的返回值為 3?那麼 cnt 的值為啥?

經驗證,當str = "cnt = 3 cnt = 3"時,sscanf的返回值仍為 1 。

當**寫成如下:

int cnt, mnt;

char str[

256]

="cnt = 56,78vertex = 333"

;char str2[

256]

;sscanf

(str,

"cnt = %d,%d,%s"

,&cnt,

&mnt, str2)

;

那麼,sscanf的返回值將等於 3。str2 為 「vertex」

當然,以上**中仍有問題, cnt mnt 需初始化,,str2 也應該用 memset 賦 0。

主函式的返回值返回給誰 主函式返回值

responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...

有返回值和無返回值函式

前面在定義函式時,有些函式使用了return語句,有些函式沒有使用return語句,使用return語句與不使用return語句有什麼區別呢?由前面的章節我們知道,若定義函式時沒有使用return語句,則預設返回乙個none。要返回乙個none,可以只寫乙個return,但要返回具體的數值,就需要在...

返回值優化

通過傳值方式返回要建立新物件時,應注意使用的形式,例如在operator return integer left.l right.l 咋看起來這像是乙個 對乙個建構函式的呼叫 其實並非如此。這是臨時物件語法,它是在說 建立乙個臨時integer物件並返回它 據此我們可能認為如果建立乙個有名字的區域性...