用c++编写两个不同类型的变量

Write two variables of different type in c++

本文关键字:两个 同类型 变量 c++      更新时间:2023-10-16

我知道这个问题可能看起来有点愚蠢,但我尝试了所有的方法,但不知道如何制作,我试图在消息框中写两种不同的类型,一种是字符串,另一种是这样的字符:

MessageBox(NULL, buffer, "", MB_OK | MB_ICONINFORMATION);

我正在尝试在缓冲区之前添加一个字符串,并尝试

"字符串"+缓冲区

"字符串"<lt;缓冲

但两者都不起作用。感谢所有的回复者都非常感谢

编辑


我真正的问题是,当我试图将其作为字符串并在消息框中显示时,我收到了一个错误,无法从字符串转换为LPCSTR

使用std::string,一切都会好起来的。我猜buffer而不是类型的char,而是char const *,不是吗?然后您可以使用+运算符:

std::string("string") + buffer;

如果MessageBox采用char const *参数,则可以使用std::stringc_str()成员函数传递字符串:

MessageBox(NULL, (std::string("string") + buffer).c_str(), "", MB_OK | MB_ICONINFORMATION);

在C++中,这些是表示字符串的不同方式。

最简单的是array of characters。这很简单,速度也很快,但数组没有任何智能,所以很容易覆盖数组的末尾(缓冲区溢出),这非常糟糕。

#include <iostream>
int main() 
{
    const int nLength = 24;
    char szBuff[nLength];
    ::strcpy(szBuff, "Hello");   // cpy ==> copy
    ::strcat(szBuff, " World");  // cat ==< concatenate
    std::cout << szBuff << "n";
    return 0;
}

标准库提供了一个类std::string。这个类会自动调整自身的大小,使其对错误的适应能力更强。

#include <iostream>
#include <string>
int main() 
{
    std::string sBuff;
    sBuff = "Hello";
    sBuff += " World";
    std::cout << sBuff << "n";
    return 0;
}

当你调用一个函数时,你需要知道它需要什么样的字符串。

如果它需要一个std::string,而你给它一个数组(const char *),那没关系,因为std::string是从char数组自动构造的。

在相反的情况下,函数需要一个数组,但得到一个std::字符串,这将生成编译器错误。幸运的是,std::字符串有一个函数"c_str()"

int main() 
{
    std::string sStr = "Hello";
    char szArr[24] = "Hello";
    funcA(szArr); // OK
    funcA(sStr);  // OK
    funcB(szArr); // OK
    funcB(sStr);  // Syntax Error
    funcB(sStr.c_str()); // OK
    return 0;
}

现在,在您的例子中,MessageBox()将一个字符数组(const char *)作为其第二个参数,我假设buffer是一个字符阵列。不能简单地连接两个数组,但必须使用::strcat()

void ShowMsg(const char *szMsg)
{
    const char *szPrefix = "Error: ";
    const int nLen = 256;
    char szBuff[nLen];
    // make sure buffer is big enough
    assert(strlen(szPrefix) + ::strlen(szMsg) < nLen);
    ::strcpy(szBuff, szPrefix);
    ::strcat(szBuff, szMsg);
    ::MessageBox(NULL, szBuff, "", MB_OK | MB_ICONINFORMATION);
}

现在可以像sPrefix + sMsg一样将两个std::string加在一起,结果是std::string。您甚至可以像sPrefix + szMsg一样将一个数组附加到std::string,仍然会给出std::字符串。因此,我们的ShowMessage()函数可以简化。

void ShowMsg(const char *szMsg)
{
    std::string sPrefix = "Error: ";
    ::MessageBox(NULL, (sPrefix + szMsg).c_str(), "", 
                 MB_OK | MB_ICONINFORMATION);
}

现在我们刚刚触及字符串复杂性的表面。我建议你在做得太深入之前,先用一篇好的C++文本近距离地、个人化地学习字符串。

或者作为一个字符字符串(如果缓冲区是一个字符*)

char * Result;
Result = new char (strlen(buffer) + strlen("string") + 1);
sprintf (Result, "string%s", buffer);
MessageBox(NULL, Result, "", MB_OK | MB_ICONINFORMATION);
delete Result;