網上有很多關於strtod()函式的文章,不過大部分都是用strtod()函式轉換乙個字元
char *str = "111.11";
char *target;
double ret;
ret = strtod(str, &target);
很少有轉換字串的這樣的用法
char *p = "111.11 -2.22 nan nan(2) inf 0x1.bc70a3d70a3d7p+6 1.18973e+4932zzz";
本文主要參考strtod()函式, 只是對其中的**示例進行解釋,當然我理解示例**時遇到了一點問題,在stackoverflow提問了以下,結果barmar大神直接把**解釋了一遍,很佩服這位大神,stackoverflow版鏈結
#include
#include
#include
int main(void)
printf("%f\n", f);
}// parsing without error handling
printf("\" -0.0000000123junk\" --> %g\n", strtod(" -0.0000000123junk", null));
printf("\"junk\" --> %g\n", strtod("junk", null));
}
問題 1:
p = end //這條語句是幹什麼用的?
strtod()函式的引數:
double strtod( const
char *str, char **str_end );
st
r str
指向字串的指標 en
d_st
r end
_str
指向指標的指標
在未呼叫strtod()函式前,列印字串指標p
以及end
的位址
printf("%p\n", p);
printf("%p\n", end);
執行結果
0000000000408000
000000000000002
d
接下來在執行迴圈時,列印p
和end
的位址
for (f = strtod(p, &end); p != end; f = strtod(p, &end))
//printf("%f\n", f);
}
輸出
p addr = 0000000000408000
endaddr = 0000000000408006
'111.11' -> 111.110000
p addr = 0000000000408006
endaddr = 000000000040800c
' -2.22' -> -2.220000
p addr = 000000000040800c
endaddr = 0000000000408010
' nan' -> 1.
#qnan0
p addr = 0000000000408010
endaddr = 0000000000408017
' nan(2)' -> 1.
#snan0
p addr = 0000000000408017
endaddr = 000000000040801b
' inf' -> 1.
#inf00
p addr = 000000000040801b
endaddr = 0000000000408030
' 0x1.bc70a3d70a3d7p+6' -> 111.110000
p addr = 0000000000408030
endaddr = 000000000040803f
可以發現end
指標總會指向當前字串中某乙個字元的下乙個字元,p
指標會指向當前字串中某乙個字元
因此p = end
這條語句實現了對字串中的所有字元進行strtod()操作,而當for (f = strtod(p, &end); p != end; f = strtod(p, &end))
語句中的p = end
時,也即是沒有字元需要進行strtod()操作了,就可以退出迴圈
問題2:
printf("'%.
*s' -> ", (int)(end-p), p);
列印出的為什麼是一系列字元,如:
'111.11'
' -2.22'
' nan'
' nan(2)'
' inf'
' 0x1.bc70a3d70a3d7p+6'
' 1.18973e+4932'
(int)(end - p)
計算長度,%.*s
中的*
代表長度,也即是從當前字串中選取多少個字元進行列印
示例**:
#include
int main ()
輸出
length = 2
str = he
length = 3
str = hel
c語言函式詳解
c程式是由函式組成的,我們寫的 都是由主函式main 開始執行的。函式是c程式的基本模組,是用於完成特定任務的程式 單元從函式定義角度看,函式可分為系統函式和使用者定義函式。系統函式,即庫函式 這是由編譯系統提供的,使用者不必自己定義這些函式,可以直接使用他們,如我們常用的列印函式printf 使用...
C語言qsort函式詳解
qsort函式是ansi c標準中提供的,其宣告在stdlib.h檔案中,是根據二分發寫的,其時間複雜度為n log n 其結構為 void qsort void base,size t nelem,size t width,int comp const void const void 其中 bas...
C語言main 函式詳解
c的設計原則是把函式作為程式的構成模組。main 函式稱之為主函式,乙個c程式總是從main 函式開始執行的。在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式...