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物件並返回它 據此我們可能認為如果建立乙個有名字的區域性...