关于初始变量的一个初级问题

zjkzyh 2002-02-06 09:26:49
我在OnInitDiag函数中给组合框做初始工作,从一个文件中读取内容,
定义为CFile,读取到一个CString 变量中, 然后用sscanf 从CString 中向全局变量
读取值,但在循环外对全局变量进行初始时出现,core 的现象。
不知为何,请教各位。

谢谢!!!
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjkzyh 2002-02-20
  • 打赏
  • 举报
回复
这是我的程序中进行初始处理的部分
CFormatConvertDlg::CFormatConvertDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFormatConvertDlg::IDD, pParent)
{
CStdioFile Dl_File;
BOOL bEnd;
CString Dl_Record;
int t_DLZL, t_JD_Flag;
char t_DLZLName[10], t_DLZLName1[30];
short Num = 0;

//{{AFX_DATA_INIT(CFormatConvertDlg)
m_File_Name = _T("");
m_Target_File_Name = _T("");
m_Select_Type = -1;
m_Branch_No = 0;
m_Display = _T("");
m_dldwzh = _T("");
m_dlywbh = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//初始代理业务种类
if ( Dl_File.Open(Dl_File_Name, CFile::modeRead) == FALSE )
{
MessageBox("打开文件错!",NULL,NULL);
return;
}
bEnd=Dl_File.ReadString(Dl_Record);
if(!bEnd)
{
MessageBox("空!请检查文件!",NULL,MB_ICONSTOP);
return ;
}
while (bEnd )
{
memset(t_DLZLName ,0, 10 );
memset(t_DLZLName1, 0 , 30);
Dl_Record.TrimLeft();
Dl_Record.TrimRight();
if(Dl_Record.GetAt(0) != '#')
{
strncpy(t_str, Dl_Record,Dl_Record.GetLength());
sscanf(t_str, "%d %s %s %d",
/* 可以 t_DLZL,
t_DLZLName1,
t_DLZLName,
t_JD_Flag*/
DLYW_JL[Num].DLZL ,
DLYW_JL[Num].DLZLName1,
DLYW_JL[Num].DLZLName,
DLYW_JL[Num].JD_Flag
);


用前面没有封起来的语句则出现core 现象但若用零时变量的方式则可以通过。!!!!!!!!!!

/* DLYW_JL[Num].DLZL = t_DLZL;
strcpy (DLYW_JL[Num].DLZLName1, t_DLZLName1);
strcpy(DLYW_JL[Num].DLZLName, t_DLZLName);
DLYW_JL[Num].JD_Flag = t_JD_Flag;
*/
Num ++ ;
Dl_Record="";
} //end if
bEnd=Dl_File.ReadString(Dl_Record);
} //end while
DLYW_JL[Num].DLZL = -1 ; //结束标志
}


请赐教!!

谢谢!!
tomPeakz 2002-02-06
  • 打赏
  • 举报
回复
不报错不意味着就正确。:)
GetBuffer()返回的是LPTSTR 。我建议你不要把C运行库跟MFC类库混合使用,最好有转换。不然...
没有明白,究竟是用CString -> 全局变量 还是倒过来?
zjkzyh 2002-02-06
  • 打赏
  • 举报
回复
tomPeakz(张子) 
我把该CString 用getbuffer 取一个缓冲也不行呀!!

CString xx;
sscanf( xx.GetBuffer(), "..." , v1, v2, ... );
并且是即使用 sscanf( xx , "..." , v1, v2, .. ); 很多时候也是可以的(不报错)


tomPeakz 2002-02-06
  • 打赏
  • 举报
回复
使用sscanf的参数类型错了,
int sscanf( const char *buffer, const char *format [, argument ] ... );
int swscanf( const wchar_t *buffer, const wchar_t *format [, argument ] ... );
字符串并不是指的是CString,CString是一个类结构。
应该使用TCHAR类型的数组,以\0结尾就可以了。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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