表达不会评估为恒定
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;
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- c++11评估顺序(未定义的行为)
- 如何使用"equal to"以外的评估编写开关语句
- 嵌套 if 中没有返回评估
- 懒惰的参数评估try_emplace?
- 在实践中,在运行时为零的乘法中是否有任何"lazy"评估
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- C++17:使用 std::optional 来评估枚举是否包含值
- CNTK:->转发或 ->评估某些电脑上的崩溃,而不是其他电脑上的崩溃
- ConstexPR :GCC比Clang更努力地评估ConstexPR
- C++:Constexpr斐波那契数列评估
- C++能保证论点评估的原子性吗?
- 在编译时评估函数开销的通用方法
- 如何使用 std::forward 精确地评估参数包的扩展?
- MSVC 在不知道类型的情况下评估上下文(和错误)
- C++评估顺序优化是否意味着对不同的操作数使用不同的内核?
- 条件分支评估
- C++ constexpr语言 - 可以在编译时评估值吗?
- 井字游戏:评估节点的启发式值
- 布尔值始终评估为真