首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

哪位大侠帮忙看下,为什么无法生成记录文件啊解决方案

2012-03-30 
哪位大侠帮忙看下,为什么无法生成记录文件啊?//---------------------------------------#include vcl.h

哪位大侠帮忙看下,为什么无法生成记录文件啊?
//---------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <dir.h>
#include <io.h>
#include <fcntl.h>
#pragma hdrstop

#include "log.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Lines->Add("发生器条码存在,等待匹配。");

WriteFIle("发生器条码存在,等待匹配。",1);

m_strPath = new char[200];
m_strFileName = new char[100];

memset(m_strPath, 0, sizeof(m_strPath));
memset(m_strFileName, 0, sizeof(m_strFileName));

//默认当前目录
char szExePath[MAX_PATH];
GetModuleFileName(NULL, szExePath, MAX_PATH);
*(strrchr(szExePath, '\\')) = '\0';
strcpy(m_strPath, szExePath);

sprintf(m_strFileName, "%s.txt",DateToStr(Now()));
}
//---------------------------------------
void __fastcall TForm1::SetPath(char *strPathName)
{
char *ptr = NULL;
strcpy(m_strPath, strPathName);
ptr = strrchr(m_strPath, '\\'); 
if(ptr != NULL)
{
*strrchr(m_strPath, '\\') = '\0';
}
}
//---------------------------------------
int __fastcall TForm1::WriteFIle(char *strInfo,int sign)
{
char strPathName[200];
switch(sign)
{
case 1:
sprintf(strPathName, "%s\\normallog\\", m_strPath);
break;
case 2:
  sprintf(strPathName, "%s\\warnlog\\", m_strPath);
break;
default:
  sprintf(strPathName, "%s\\other\\", m_strPath);
break;
  }
_mkdir(strPathName);

strcat(strPathName, m_strFileName);
TStringList *t=new TStringList();

if ( FileExists(strPathName))
t->LoadFromFile(strPathName);
AnsiString str_t ;
str_t.printf("[%s] %s ",Now().FormatString("YYYY-MM-DD HH:MM:SS"),strInfo) ;
t->Add(str_t);
t->SaveToFile(strPathName);
delete t;
return 1;

}
//---------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete [] m_strPath;
delete [] m_strFileName;
}
//---------------------------------------
上面的程序报错access violation at address 32658731 in module'CC3260MT.DLL'.Read of address 00000000.
并指向strcat(strPathName, m_strFileName);这行

网上查大概是内存分配的问题,指针没用好。
我是实在不知道怎么改了。求大侠帮忙。谢谢了

[解决办法]
但是还是有问题,因为
m_strPath,m_strFileName没有任何数据你就调用那个函数,最终应该是这样的:

C/C++ code
  m_strPath = new char[200];  m_strFileName = new char[100];  memset(m_strPath, 0, sizeof(m_strPath));  memset(m_strFileName, 0, sizeof(m_strFileName));  Memo1->Lines->Add("发生器条码存在,等待匹配。");  //默认当前目录  char szExePath[MAX_PATH];  GetModuleFileName(NULL, szExePath, MAX_PATH);  *(strrchr(szExePath, '\\')) = '\0';  strcpy(m_strPath, szExePath);  sprintf(m_strFileName, "%s.txt",DateToStr(Now()));  WriteFIle("发生器条码存在,等待匹配。",1);
[解决办法]
呵呵,我也刚看出来,你的
WriteFIle("发生器条码存在,等待匹配。",1);
应该是在所有变量赋值之后

热点排行