关于C++ MFC中开发遇到的问题记录_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 关于C++ MFC中开发遇到的问题记录

关于C++ MFC中开发遇到的问题记录

 2015/5/4 14:57:49  冤大头_718  程序员俱乐部  我要评论(0)
  • 摘要:(一)C++中的字符串转换char*与string的转换voidpCharToString(){//fromchar*tostringchar*ch="helloworld";strings1=ch;//直接初始化或赋值strings2(ch),s3;s3=string(ch);cout<<s1<<endl;cout<<s2<<endl;cout<<s3<<endl
  • 标签:MFC c++ 问题 开发
(一)C++中的字符串转换
char*与string的转换
class="C++" name="code">
void pCharToString()
{
	//from char* to string
	char * ch = "hello world";
	string s1 = ch;	//直接初始化或赋值
	string s2(ch), s3;
	s3 = string(ch);
	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	//from string to char*
	string str = string("string is commonly used.");
	/*************************************************************************
	其实没有很大的必要将string转换成char*,因为string可以直接当成字符数组来使用,
	即通过下标来访问字符元素,如str[1]表示第1个字符't'
	**************************************************************************/
	const char *ch1 = str.c_str();	
	cout << ch1 << endl;
}

char*与CString
void pCharToCString()
{
	//from char* to CString
	char *ch = "char pointer.";
	CString cStr1 = ch;
	CString cStr2 = CString(ch);
	printCString(cStr1);
	printCString(cStr2);
	//from CString to char*
	CString cstr = "CString";
	char* chs=cstr.getbuffer(0);
	cout << chs << endl;
}

string与CString
void stringToCString()
{
	//from string to CString
	string s1 = "string1 to CString";
	string s2 = "string2 to CString";
	string s3 = "string3 to CString";
	CString cstr(s1.c_str());
	printCString(cstr);
	CString cstr2;
	cstr2.Format("%s", s2.c_str());	// string to CString
	printCString(cstr2);
	cstr2.Format("%s", s3.data());	// string to CString
	printCString(cstr2);

	//from CString to string
	CString cstr3 = "CString to string3";
	CString cstr4 = "CString to string4";
	string str;
	str=cstr3.GetBuffer(0);
	cout << str << endl;
	str = LPCSTR(cstr4); 
	cout << str << endl;
}

c_str()和data()区别是:前者返回带'/0'的字符串,后者则返回不带'/0'的字符串.


VS2010环境下,cstr2.Format("%s", s2.c_str());cstr2.Format("%s", s3.data());及str=cstr3.GetBuffer(0);str = LPCSTR(cstr4); 可能会编不过,会报类似error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [3]' to 'const wchar_t *'的错误。这是因为你的工程的字符集不是多字节字符集,将你的工程属性设置为多字节字符集即可,方法是:右键点击你的工程,选择Properties\Configurations Properties\General,在右侧的Project Defaults下的Character Set选择Use Multi-Byte Character Set。

总结
从灵活度来说,string最灵活易用,其次是CString,char*的拓展性和灵活性比较差。 一般来说在基于标准库开发时用string,在在MFC和ATL编程时用CString。

CString、string之间的转换还有其它的一些方向,但基本上都是通过char*作为桥梁,因为char*即可以方便地转换成string,也可以方便地转换成CString


(二)CreateProcess的使用
STARTUPINFO si = { sizeof(si) };
		si.dwFlags=STARTF_USESHOWWINDOW;
		si.wShowWindow=SW_HIDE;

利用上面的代码可以设置创建一个隐藏的进程
CreatProcess(LPCSTR lpApplicationName,LPSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcesInformation);

lpApplicationName是应用程序的名称
lpCommandLine是命令行参数
lpProcessAttributes是进程的属性
lpThreadAttributes是线程的属性
bInheritHandles 是否继承父进程的属性
dwCreationFlags 是创建标志
lpEnvironment 是环境变量
lpCurrentDirectory 是当前目录
lpStartupInfo是传给新进程的信息
lpProcessInformation是进程返回的信息

第一个参数是之间创建一个进程,第二个是通过命令行创建进程,可以发送参数
_tmain(int argc, char * argv[])方法解读
该方法是一个控制台程序的入口程序,但是程序启动后会主动寻找该函数,并运行该函数.
该方法有2个参数.第一个是给该方法传递了几个参数,第二个是所传递的参数,比如:
notepad.exe c:\1.txt 则该方法第一个参数为2 有2个,分别是notepad.exe和c:\1.txt
发表评论
用户名: 匿名