作者JeffHung (御風只配做笨木頭)
看板C_and_CPP
標題Re: [問題] fopen() & fwrite() 問題
時間Sun Oct 14 08:12:36 2012
※ 引述《loveme00835 (高髮箍)》之銘言:
: ※ 引述《changyuheng (張昱珩)》之銘言:
: : fopen 是 c 的 function,string 是 c++ 的
: : sprintf(name, "..\\Temp\\%s", "20121012");
: 請愛用 snprintf
: snprintf( name, sizeof(name), "..\\Temp\\%s", strdate.c_str() );
^^^^^^^^^^^^
小心這個參數。
http://www.jeffhung.net/blog/articles/jeffhung/1064/
: : "1F ..." 中,
: : 1 是 ASCII table 中的 49,佔 8 bytes,
^^^^^^^
: : F 是 ASCII table 中的 70,佔 8 bytes...
^^^^^^^
這裡怪怪的。既然是 char array 應該只佔 1 byte = 8 bits。
: 標準作法:
: #include <stdint.h>
: #include <inttypes.h>
: char const * input = "1F 08 08 0A 3A 5C 2E 6F 05";
: while( *input ) {
: // 間隔任意數目空白
: while( isspace(*input) )
: ++input;
: uint8_t value;
: sscanf( input, "%" SCNx8, &value );
: fwrite( &value, sizeof(value), 1, fw );
: input += 2;
如果 input 是 "1F 08 3" 或 "1F 08 YA" 可能會爆。
請檢查 sscanf 的 return value。
: }
: 注意標色地方需剛好為 8 bits 且沒有任何 padding 才能容納
: 讀入的數值,
原 po 的 gap 有點大,問題其實不在該用哪個 lib/func,而是沒有型別概念。
建議把《The C Programming Language》當小說好好先全部念完一遍。
--
我的微笑,堅持要有鼻子。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.103.120
→ loveme00835:拿 VC6 來談 C99 的東西... VC10 都不一定符合標準了 10/14 11:32
→ JeffHung:沒注意到是版主大人,失敬。 10/14 12:07
→ JeffHung:確實,為了向前相容,VC10 的 snprintf 多半也不符標準。 10/14 12:08
推 changyuheng:謝謝您的指正 10/15 13:50