Re: [問題] 在迴圈裡面重複寫出txt檔

作者: holydc (のヮの)   2014-10-29 02:58:42
※ 引述《belle800620 (企鵝)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: C 語言
: 問題(Question):
: 想要在迴圈裡面多次輸出不同的檔案
: 但是輸出的檔案名稱其中一部分會隨著變動
: 目前我這樣寫雖然可以輸出多個txt檔
: 但是不知為何名稱變成亂碼@@
: 程式碼如下:
: char file_start[15] = "Results_time_"; //這部分名稱是固定的
: char file_end[15] = ".text";
: char order; //這部分名稱會隨著下面迴圈跑到哪裡而改
: for(i=0;i<100;i++)
: {
: if(i%5==0) //當i除以5為整數時才輸出檔案
: {
: order = (char)(i);
: string a;
: a.assign ( file_start + order + file_end );
: Results = fopen ( a, "w+");
: }
: }
: 不知道為什麼輸出結果的檔名是一堆亂碼@@...
: 先謝謝大家了:)
: }
看到開發平台是 C 語言又看到 string 讓我很困惑 XD
我覺得這種東西用 format string 做比較簡單
int i = -1;
for (i = 0; i < 100; ++i) {
if ((i % 5) == 0) {
char file_name[64];
FILE *results = NULL;
sprintf(file_name, "Results_time_%d.txt", i);
results = fopen(file_name, "w+");
/* ... */
}
}
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-10-29 09:19:00
sprintf()實在
作者: dirkc (3781615)   2014-10-29 12:01:00
大概是說sprintf容易有緩衝區溢位的問題;snprintf感覺不錯
作者: Killercat (殺人貓™)   2014-10-29 12:54:00
如果要方便的話 c2lib是你的好選擇
作者: handsome616 (豆花伯爵)   2014-10-29 13:19:00
小聲問緩衝區溢位會有什麼問題?
作者: dirkc (3781615)   2014-10-29 14:05:00
會覆蓋到記憶體中其他的資料或指令,通常是安全問題
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-10-29 22:13:00
這個例子要溢位,%d要有46位,超過現存任何系統int大小128-bit都不一定可以,太偉大了。
作者: xvid (DivX)   2014-10-29 23:42:00
是指緩衝區溢位攻擊吧
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-10-29 23:54:00
是啊!這裡的緩衝區就是char[64] 你覺得要怎樣才能擠破"Results_time_%d.txt"裡面的%d要多長才會擠破64格?
作者: holydc (のヮの)   2014-10-30 00:32:00
沒關係啦,多注意也是好的 XD 這裡真的無可能就是了
作者: Killercat (殺人貓™)   2014-10-30 10:43:00
老實講雖然這不會造成overflow, 不過sprintf容易出這種包也是事實,在這個點上面放點心眼總是好的
作者: dirkc (3781615)   2014-10-30 14:17:00
感謝補充,此例的確不會,我原是想順道題一下sprintf本身而已

Links booklink

Contact Us: admin [ a t ] ucptt.com