Re: [問題] fopen() & fwrite() 問題

看板C_and_CPP作者 (御風只配做笨木頭)時間13年前 (2012/10/14 00:12), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串4/6 (看更多)
※ 引述《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

10/14 11:32, , 1F
拿 VC6 來談 C99 的東西... VC10 都不一定符合標準了
10/14 11:32, 1F

10/14 12:07, , 2F
沒注意到是版主大人,失敬。
10/14 12:07, 2F

10/14 12:08, , 3F
確實,為了向前相容,VC10 的 snprintf 多半也不符標準。
10/14 12:08, 3F

10/15 13:50, , 4F
謝謝您的指正
10/15 13:50, 4F
文章代碼(AID): #1GUWDurp (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GUWDurp (C_and_CPP)