2

我在使用带有变量的 MessageBox 函数时遇到了困难

我有

int main(int argc, char* argv[])
{
   char* filename = argv[0];
   DWORD length = strlen(filename);

   MessageBox(0, TEXT("filename text"), TEXT("length text"), 0); // Works
}

但我想将变量文件名和长度输出为:

MessageBox(0, filename, length, 0); -- compiler error

函数 MessageBox 有语法:

int WINAPI MessageBox(
  _In_opt_  HWND hWnd,
  _In_opt_  LPCTSTR lpText,
  _In_opt_  LPCTSTR lpCaption,
  _In_      UINT uType
);

我尝试使用

MessageBox(0, (LPCWSTR)filename, (LPCWSTR)length, 0);

但输出是某种象形文字。

4

2 回答 2

0

变量length不是字符串,只能使用字符串。尝试将其强制转换为 a 并没有帮助,char*因为然后 valuelength将被视为指向字符串的指针,这将导致未定义的行为。

对于 C++,您可以使用 egstd::to_string将非字符串值转换为字符串,例如

MessageBox(0, filename, std::to_string(length).c_str(), 0);

请注意,您必须使用该c_str函数来获取char*.

如果你没有,std::to_string那么你可以使用 egstd::istringstream代替:

std::istringstream is;
is << length;
MessageBox(0, filename, is.str().c_str(), 0);

如果您想要更老式的 C 解决方案,那么snprintf(或_snprintf在 Visual Studio 中):

char length_string[20];
_snprintf(length_string, sizeof(length_string), "%ld", length);
MessageBox(0, filename, length_string, 0);
于 2013-09-05T10:04:16.763 回答
-1

对于 VS2015 中的 C++ win32 项目,一个字符数组会显示在带有此代码的 MessageBox 中。包含头文件 atlstr.h

// open a file in read mode.
ifstream myInfile;

myInfile.open("C:\\Users\\Desktop\\CodeOnDesktop\\myTrialMessageBox.txt");

if (myInfile.fail())
{
    MessageBox(NULL,
        L"We have an error trying to open the file myTrialMessageBox.txt",
        L"Opening a file.",
        MB_ICONERROR);
}

char data[200];

// Read the data from the file and display it.
//infile >> data;   // Only gets the first word.

myInfile.getline(data, 100);

//To use CString, include the atlstr.h header.
// Cast array called data to a CString to enable use as MessageBox parameter.

CString cdata = (CString)data;

// or CString cdata = CString(_T("A string"));

MessageBox(NULL,
    cdata,
    L"Opening a file.",
    MB_ICONERROR);

// close the opened file.
myInfile.close();
于 2017-02-20T03:37:55.267 回答