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