BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #89224同步于 2015/10/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【已解决】VS 同一代码加断点不加断点结果居然是不一样的。

wyliewylie
2015/10/28镜像同步6 回复
今天调试代码,内容大致如下: FILE *result=NULL; sprintf(buf_com,"%s\\Cruise_Result.csv",name); result = fopen(buf_com,"a+"); if(result == NULL) { return ERROR_NOT_OPEN_ERROR; } fprintf(result,"..."); chdir(Path); ...剩余操作... fopen+fprintf+fclose 跑了一遍,csv文件没生成。 然后在开头fopen和fprintf处加断点,一步一步走,csv文件生成了。 然后把断点去了,又没生成。 反反复复好几遍,代码一行没改,就加了断点才能生成文件…… 还得向各位请教。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
wyliewylie机器人#1 · 2015/10/28
查了一下午,解决了,原因真是无语。 在fopen之前,用win下的接口WinExec调用"mkdir"创建文件夹。 关键这一步是异步的,mkdir没执行完,非常快的就调用了fopen,导致fopen找不到路径而失败。 只要给fopen前加一个微弱的延时就好了。
FromSixToTen机器人#2 · 2015/10/28
换GCC,你懂得。 【 在 wyliewylie 的大作中提到: 】 : 查了一下午,解决了,原因真是无语。 : 在fopen之前,用win下的接口WinExec调用"mkdir"创建文件夹。 : 关键这一步是异步的,mkdir没执行完,非常快的就调用了fopen,导致fopen找不到路径而失败。 : ...................
nuanyangyang机器人#3 · 2015/10/28
如果是windows API的话,何不用CreateDirectory函数呢? WinExec的作用是执行一个命令,显然要创建另一个进程。这样的话,延迟也是错误的做法。操作系统随时有权让任何进程睡任意时间的觉。所以,进行线程、进程间的协调工作,不能靠定时,要靠“同步”。这包括锁、信号量、消息队列等。 况且WinExec是一个过时的函数,是为了和旧的16位程序兼容用的。所以,用CreateDirectory吧。
wyliewylie机器人#4 · 2015/10/29
回暖神: 我初次在win环境下写c++。最后直接新建了工程编译了.exe粗暴解决。项目用的解密解压命令失传了,只能调用现成的exe。以往直接调system在linux里跑并等待其返回,但在win下会弹出cmd命令窗口,影响体验。所以才想着用WinExec,现在来看win下的编程还有很多漏洞。 谢暖神指点! 【 在 nuanyangyang 的大作中提到: 】 : 如果是windows API的话,何不用CreateDirectory函数呢? : WinExec的作用是执行一个命令,显然要创建另一个进程。这样的话,延迟也是错误的做法。操作系统随时有权让任何进程睡任意时间的觉。所以,进行线程、进程间的协调工作,不能靠定时,要靠“同步”。这包括锁、信号量、消息队列等。 : 况且WinExec是一个过时的函数,是为了和旧的16位程序兼容用的。所以,用CreateDirectory吧。
nuanyangyang机器人#5 · 2015/10/29
【 在 wyliewylie 的大作中提到: 】 : 回暖神: : 我初次在win环境下写c++。最后直接新建了工程编译了.exe粗暴解决。项目用的解密解压命令失传了,只能调用现成的exe。以往直接调system在linux里跑并等待其返回,但在win下会弹出cmd命令窗口,影响体验。所以才想着用WinExec,现在来看win下的编程还有很多漏洞。 : 谢暖神指点! linux上也有mkdir系统调用啊。。。
wyliewylie机器人#6 · 2015/10/29
上边这段代码是跑在win上的,缺点是system("mkdir ...")会弹出cmd命令,我当时不知道有CreateDirectory,才转而用WinExec的。 【 在 nuanyangyang 的大作中提到: 】 : : linux上也有mkdir系统调用啊。。。