不存在从 "CString" 到 "char *" 的适当转换函数求教

dadiguamaomao 2014-05-13 03:10:27
原来代码里面是COPini::WriteString("配置信息", "厚度", P[0],“setinfo.ini”)
这样可直接在指定目录下生成setinfo.ini配置文件
现在我是想把系统时间作为文件名来保存但是直接这样弄不行,我也查了很多资料有人说用下面这些方法把CString转换为char*
CTime t = CTime::GetCurrentTime();
CString tm = t.Format("'%Y/%m/%d-%H/%M/%S'");
tm =tm + ".ini";
COPini::WriteString("配置信息", "厚度", P[0],tm)//tm的参数类型为char *;

我是想把系统时间作为文件名来保存但是直接这样弄不行,我也查了很多资料有人说用下面这些方法把CString转换为char*

1.传给未分配内存的const char* (LPCTSTR)指针.
CString cstr(asdd);
const char* ch = (LPCTSTR)cstr;
ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.

2.传给未分配内存的指针.
CString cstr = "ASDDSD";
char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);
cstr.ReleaseBuffer();
//修改ch指向的值等于修改cstr里面的值.
//PS:用完ch后,不用delete ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.

3.第二种用法。把CString 值赋给已分配内存的char *。
CString cstr1 = "ASDDSD";
int strLength = cstr1.GetLength() + 1;
char *pValue = new char[strLength];
strncpy(pValue, cstr1, strLength);
之后试过转换类型还是不行
CTime t = CTime::GetCurrentTime();
CString tm = t.Format("'%Y/%m/%d-%H/%M/%S'");
tm =tm + ".ini";
CString time(tm);
char *pvalue =(LPTSTR)(LPCTSTR)tm;
COPini::WriteString("配置信息", "厚度", P[0],pvalue)

那个大神能帮我解决下
...全文
1362 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
凌乱哥 2014-05-13
  • 打赏
  • 举报
回复
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 12 楼 VisualEleven 的回复:
CTime t = CTime::GetCurrentTime();
	char szPath[MAX_PATH] = {0};
	StringCchPrintfA(szPath, _countof(szPath), "%04d%02d%02d-%02d%02d%02d", t.GetYear(), t.GetMonth(), t.GetDay(), t.GetHour(), t.GetMinute(), t.GetSecond());
	COPini::WriteString("配置信息", "厚度", P[0], szPath)
谢谢你,搞定了
凌乱哥 2014-05-13
  • 打赏
  • 举报
回复

int n = MultiByteToWideChar(CP_ACP,0,ac,-1,NULL,0);//ac是你要转换的char*
wchar_t* buff = new wchar_t[n];
wmemset(buff,0,n);
MultiByteToWideChar(CP_ACP,0,ac,-1,buff,n);
CString strRet = buff;//strRet即为转换完毕的CString
另,文件名中是不允许有/ \ ?之类的
china_119 2014-05-13
  • 打赏
  • 举报
回复
COPini::WriteString("配置信息", "厚度", P[0],pvalue) 这个类还有这个函数是你自个创建的吗?
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 13 楼 schlafenhamster 的回复:
COPini::WriteString("配置信息", "厚度", P[0],tm)//tm的参数类型为char *; COPini::WriteString("配置信息", "厚度", P[0],(LPSTR)(LPCSTR)tm)//tm的参数类型为char *;
这个我已经试过完全不行
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 9 楼 dadiguamaomao 的回复:
引用 7 楼 china_119 的回复:
_T(tm)就好了,不要加双引号
要求char *
不加引号就会出现 不存在从 "CString" 到 "char *" 的适当转换函数
schlafenhamster 2014-05-13
  • 打赏
  • 举报
回复
COPini::WriteString("配置信息", "厚度", P[0],tm)//tm的参数类型为char *; COPini::WriteString("配置信息", "厚度", P[0],(LPSTR)(LPCSTR)tm)//tm的参数类型为char *;
Eleven 2014-05-13
  • 打赏
  • 举报
回复
CTime t = CTime::GetCurrentTime();
	char szPath[MAX_PATH] = {0};
	StringCchPrintfA(szPath, _countof(szPath), "%04d%02d%02d-%02d%02d%02d", t.GetYear(), t.GetMonth(), t.GetDay(), t.GetHour(), t.GetMinute(), t.GetSecond());
	COPini::WriteString("配置信息", "厚度", P[0], szPath)
schlafenhamster 2014-05-13
  • 打赏
  • 举报
回复
'/' 可能 被看成是 目录。
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
t.Format("'%Y/%m/%d-%H/%M/%S'"); '‘/' 改 ‘_'
这个不是问题吧
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 7 楼 china_119 的回复:
_T(tm)就好了,不要加双引号
要求char *
schlafenhamster 2014-05-13
  • 打赏
  • 举报
回复
t.Format("'%Y/%m/%d-%H/%M/%S'"); '‘/' 改 ‘_'
china_119 2014-05-13
  • 打赏
  • 举报
回复
_T(tm)就好了,不要加双引号
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
你的字符串需要用_T("xxx"), TEXT("xxx")包含起来
我这里面tm是包含的时间信息如果_T("tm")我的时间怎么显示出来
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
WideCharToMultiByte(CP_ACP, ...); 或者USES_CONVERSION; T2A()
我是想把 CTime t = CTime::GetCurrentTime(); CString tm = t.Format("'%Y/%m/%d-%H/%M/%S'"); tm =tm + ".ini"; 这里的tm传进参数,怎么想才能实现呢
dadiguamaomao 2014-05-13
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
你的字符串需要用_T("xxx"), TEXT("xxx")包含起来
不明白你什么意思,能说明白点嘛
lis2012 2014-05-13
  • 打赏
  • 举报
回复
注意命名中不能出现\ / : * ? " < > |这些符号
Eleven 2014-05-13
  • 打赏
  • 举报
回复
你的字符串需要用_T("xxx"), TEXT("xxx")包含起来
Eleven 2014-05-13
  • 打赏
  • 举报
回复
WideCharToMultiByte(CP_ACP, ...); 或者USES_CONVERSION; T2A()

16,473

社区成员

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

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

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