表达不会评估为恒定

Expression does not evaluate to constant

本文关键字:评估      更新时间:2023-10-16

我有以下愚蠢片段:

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    const string classpath = "Hello Dolly!";
    const int len = classpath.length()+1;
    char str[len];
    strncpy(str, classpath.c_str(), len);
    cout << str << endl;
    return 0;
}

目的是将C 字符串分配给C char数组。该字符串在编译时已知,因此是常数。但是字符串可能因一个项目而异。我无意为编译器计算字符。因此,如图所示,应在编译时间计算const len。这与Cygwin和Linux一起使用。但是VisualStudio编译器发现了一个问题,并给了我错误C2131!如何工作?(请考虑我是Java程序员在这种问题上陷入困境的时间!(

C 数组大小必须在编译时知道。

您可以通过使用operator new

在运行时动态分配连续内存
char * my_array = new char[length];

记住使用delete[]在完成内存后释放内存。

另外,C风格数组需要终止nul字符,因此您需要在数组中分配一个额外的插槽。

std::string复制到字符数组:

const std::string example = "example";
const std::string::size_type length = example.length();
char * p_array = new char [length + 1];
strcpy(p_array, example.c_str());
cout << p_array << endl;
delete[] p_array;