C++ “如何修复”;表达式必须有一个常量值;当值不能为常量时?

C++ “如何修复”;表达式必须有一个常量值;当值不能为常量时?,c++,arrays,C++,Arrays,问题是我的错误输出持续四次声明“表达式必须有一个常量值” 我使用过这个网站,尝试分配内存并删除它,但什么也没做。我将“mystr.length();”更改为一个数字,虽然这允许程序运行,但它提供了无效的结果 char letter = 'Y'; int position = 0; string productNames[7] = { "Pen", "Paper", "Computer", "Pepsi", "Coke", "Book", "Scanner" }; int prizeOfprod

问题是我的错误输出持续四次声明“表达式必须有一个常量值”

我使用过这个网站,尝试分配内存并删除它,但什么也没做。我将“mystr.length();”更改为一个数字,虽然这允许程序运行,但它提供了无效的结果

char letter = 'Y';
int position = 0;
string productNames[7] =
{ "Pen", "Paper", "Computer", "Pepsi", "Coke", "Book", "Scanner" };

int prizeOfproducts[7] = { 10, 2, 5000, 50, 45, 400, 2000 };
while (letter == 'Y')
{
    string mystr = "";
    cout << "enter the product name you want to search : ";
    cin >> mystr;

    int n = mystr.length();
    char char_array[n + 1];
    strcpy(char_array, mystr.c_str());
    bool flag = false;
    for (int i = 0; i < 7; i++)
    {
        int m = productNames[i].length();
        char char_arrayOrig[m + 1];
        strcpy(char_arrayOrig, productNames[i].c_str());
        if (strstr(char_arrayOrig, char_array) == NULL)
        {
            flag = false;
        }
        else
        {
            flag = true;
            position = i;
            break;
        }
    }
    if (!flag)
    {
        cout <<
            "entered product not found in the product list . Do you want to search again Y/N ? : ";

        cin >> letter;
    }
char字母='Y';
int位置=0;
字符串产品名称[7]=
{“笔”、“纸”、“电脑”、“百事可乐”、“可乐”、“书”、“扫描仪”};
国际产品奖[7]={10,2,5000,50,45,400,2000};
while(字母=='Y')
{
字符串mystr=“”;
cout>mystr;
int n=mystr.length();
字符数组[n+1];
strcpy(char_数组,mystr.c_str());
布尔标志=假;
对于(int i=0;i<7;i++)
{
int m=productNames[i].length();
char char_arrayOrig[m+1];
strcpy(char_arrayOrig,productNames[i].c_str());
if(strstr(char\u arrayorg,char\u array)==NULL)
{
flag=false;
}
其他的
{
flag=true;
位置=i;
打破
}
}
如果(!标志)
{
字母;
}

我只是希望程序能够工作,而不是因为错误而停止,但是,我希望结果是准确的。

没有必要混合使用C++风格的std::string和C风格的char数组。如果要使用动态大小字符串,则需要-std::string。如果尝试使用char[]而且不知道它的大小是预先的-你可能不需要C++……/P>

尝试考虑STD::String或STD::使用CAR[]的任何地方的向量。这里是一个简单的解决问题的例子:

//char char_array[n + 1];
std::vector<char> char_array(n + 1);
//字符数组[n+1];
std::矢量字符数组(n+1);

<代码> > char查尔数组[n+1];<代码>无效C++。使用<代码> STD::向量查尔数组(N+ 1)
。另外,为什么您不在整个程序中使用
std::string
?尝试使用字符数组、
strcpy
等的原因是什么?PaulMcKenize说了什么。但也要看看这是否有助于您:欢迎使用堆栈溢出!请不要破坏您的帖子。通过在堆栈交换网络上发布,您可以e授予SE分发该内容的不可撤销权利(根据)通过SE政策,任何破坏行为都会被恢复。这不仅仅是帮助你自己,如果你在ReDIT上找到答案,那是关于帮助未来可能遇到这个问题的人。“MichaelDodd,我没有考虑过。谢谢你通知我。我再也不会犯这个错误了。