bcb 的codeguard 有bug ?

xili 2006-01-22 01:56:07
用 _wfopen() 来处理 unicode 的文件名, 当打开 codeguard 时, codeguard报错, 说"参数调用错误".
但实际文件打开和读写都是对的.

这样有点麻烦,如果关掉 codeguard, 就不能查其他错误了, 打开了又总在 _wfopen() 这里纠缠.

请各位大侠指点呀.
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xili 2006-01-23
  • 打赏
  • 举报
回复
呵呵, 老季总是有办法, 多谢.

tanlim, 字符串前L, 就表示它是 wchar_t 类型了.是编译器的约定.
加上L后,的确隐含了char 到 wchar_t转换.

但问题不是因为字符串转换的原因.我猜测原因应该是 FILE *fp 所指的内容有所不同 而被codeguard检测到, 后面的 fread, fclose 都不涉及字符串转换.
tanlim 2006-01-22
  • 打赏
  • 举报
回复
_wfopen函数是存在,定义WIDESTRING文件名的打开,而楼主的
FILE * fp2 = _wfopen(L"d:\\test.txt", L"rb");
文件名必须定义为宽字符串,而默认的BCB环境是以ANSISTRING字符串使用的,所以这个地方存在隐含转换不安全的情况。CODEGUARD报错就正常了。
再者问一下楼主你字符串前的L是宏定义吗?
原函数没这个用法呀。
jishiping 2006-01-22
  • 打赏
  • 举报
回复
其他的函数,采用类似的办法。比如你说 fclose 也会这样,那么再增加下面的2行:
[fclose]
Fail=no
jishiping 2006-01-22
  • 打赏
  • 举报
回复
我还是第一次听说 _wfopen 这个函数呢。不过可以自己配置CodeGuard文件,方法很简单。在程序目录下建立一个 ***.cgi 的文件(*** 就是程序的名字),然后用记事本打开,添加下面的2行就可以了:
[fread]
Fail=no
xili 2006-01-22
  • 打赏
  • 举报
回复
只要 FILE * fp 是用 _wfopen 打开的,

后面的 fread(), fclose() 都会被codeguard报错.
xili 2006-01-22
  • 打赏
  • 举报
回复
代码:

FILE * fp2 = _wfopen(L"d:\\test.txt", L"rb");
char buf[20];
fread(buf,1,2,fp2);
fclose(fp2);

俺的环境: win2k + bcb6
ccrun.com 2006-01-22
  • 打赏
  • 举报
回复
贴出你的代码看看。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧