程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c語言的一處陷阱:

c語言的一處陷阱:

編輯:關於C語言

實際碰到的一個問題,從MSDN上拷貝了一段代碼,是用C寫的,編譯通過,執行崩潰,

#include 

// test.c 用Unicode方式編譯崩潰
void main()
{
	STARTUPINFO si;
	PROCESS_INFORMATION pi;

	ZeroMemory( &si, sizeof(si) );
	si.cb = sizeof(si);
	ZeroMemory( &pi, sizeof(pi) );

	if( !CreateProcess( NULL,   // No module name (use command line)
		"calc.exe",        // Command line
		NULL,           // Process handle not inheritable
		NULL,           // Thread handle not inheritable
		FALSE,          // Set handle inheritance to FALSE
		0,              // No creation flags
		NULL,           // Use parent's environment block
		NULL,           // Use parent's starting directory 
		&si,            // Pointer to STARTUPINFO structure
		&pi )           // Pointer to PROCESS_INFORMATION structure
		) 
	WaitForSingleObject( pi.hProcess, INFINITE );

	// Close process and thread handles. 
	CloseHandle( pi.hProcess );
	CloseHandle( pi.hThread );
}

以上代碼用unicode方式c編譯可以通過,運行時崩潰,編譯器會報個警告,兒非錯誤

test.c(13) : warning C4133: 'function' : incompatible types - from 'char [9]' to 'LPWSTR'

CreateProcessW 的第二個參數要去是LPWSTR ,這裡被強制轉換了而c++方式編譯的話會報錯,直接編譯不過

test.cpp(21) : error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'const char [9]' to 'LPWSTR'

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved