菜鸟问题!读取.ini文件

rolt 2000-08-18 10:05:00
菜鸟问题!读取.ini文件

我初学VC,想读取.ini文件,程序如下:

CString CClient::GetServerName()
{

char szCurDir[100];
char* sServerName;
const char* sini="/Insp.ini";
char* sFilename;
CString sTemp;

GetCurrentDirectory(100, szCurDir);

MessageBox(NULL,szCurDir,NULL,MB_OK);

sFilename=strcat(szCurDir,sini);
//至此,sFileName="c:\rolt\insp.ini"
DWORD dw = GetPrivateProfileString( "Inspost",
"Server",
"",
sServerName,
1000,
sFilename);
//执行完此句,sServerName="",为什么?

/*insp.ini文件内容:
[Inspost]
Server=www.insp.org/comment
CurUser=rolt
CurPwd=8
*/

MessageBox(NULL,sServerName,NULL,MB_OK);

sTemp=sServerName;

return sTemp;
}
...全文
282 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
U皮特U 2000-08-18
  • 打赏
  • 举报
回复
你的程序中sServerName仅仅分配了一个指针,没有分配存储空间。
楼上两位char sServerName[1000];和char *sServerName = new char[1000];都能完成分配存储空间的工作,前者是在栈中分配,函数调用返回后会自动释放;后者是在堆中分配,需要在完成工作,函数结束前用delete sServerName释放空间。

huntout 2000-08-18
  • 打赏
  • 举报
回复
void CClient::GetServerName(CString& sName)
{
char szCurDir[100];
char sServerName[1000];
const char* sini="/Insp.ini";
char* sFilename;

GetCurrentDirectory(100, szCurDir);

MessageBox(NULL,szCurDir,NULL,MB_OK);

sFilename=strcat(szCurDir,sini);
//至此,sFileName="c:\rolt\insp.ini"
DWORD dw = GetPrivateProfileString( "Inspost",
"Server",
sName,
sServerName,
1000,
sFilename);

/*insp.ini文件内容:
[Inspost]
Server=www.insp.org/comment
CurUser=rolt
CurPwd=8
*/

MessageBox(NULL,sServerName,NULL,MB_OK);

sName = sServerName;
}
wistaria 2000-08-18
  • 打赏
  • 举报
回复
你给sServerName初始化一下试试。
char *sServerName = new char[1000];
zzh 2000-08-18
  • 打赏
  • 举报
回复
其实没必要这么麻烦,你在声明char* sServerName时,这样声明就可以了:char sServerName[1000];声明一个数组,就可以取字符串了,然后可以使用CString来进行格式化。
Wingsun 2000-08-18
  • 打赏
  • 举报
回复
sFileName和sServerName都没有分配空间嘛,他们是指针,没有分配空间是不可有以的。分配空间后还要释放空间,如下:
sFileName=new char[MAX_PATH+1];
sServerName=new char[1000];
...
...
delete sFileName;
delete sServerName;
将这一段程序加入到你的程序中试一试吧。
void CLoginDialog::OnBtnLogin()
{
CClient clnt;
char* strTemp;
CString sServerName;

clnt.GetServerName(sServerName);

strcpy(strTemp,sServerName.GetBuffer(100));
}
huntout 2000-08-18
  • 打赏
  • 举报
回复
// &是引用
// 還有,你的程序中又使用了沒有分配的內存
void CLoginDialog::OnBtnLogin()
{
CClient clnt;
CString sServerName;
clnt.GetServerName(sServerName);
}
rolt 2000-08-18
  • 打赏
  • 举报
回复
问huntout,那怎么调用啊?

调用程序:

void CLoginDialog::OnBtnLogin()
{
CClient clnt;
char* strTemp;
CString& sServerName;

clnt.GetServerName(sServerName);

//出错信息:error C2530: 'sServerName' :
//references must be initialized

strcpy(strTemp,sServerName.GetBuffer(100));
}

16,466

社区成员

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

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

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