Is there any way to initialize an array with a non-const integer, or to make the existing variable constant in order to make it a valid argument?
bool f( const char s[], const int n )
{
char c[n]; // error: expression must have a constant value
}
No, not in the general case. Use
vector<char> c(n)
instead.Simplified, almost correct explanation: if you don't know what
n
is at compile time, neither does the compiler. So it cannot put aside memory for the array. This is whyvector
exists.You can always use
&c[0]
to get the pointer to char if you need it elsewhere.But it is possible in C99, apparently. Thanks to @Matt McNabb for pointing this out. If you can wait a few years you might be able to compile it in C++, too. In the meanwhile, use
vector
.If you insist to have an "array" in C++, you would have to do something like:
If your program does not run forever, or do this too often, you can even just leave it as it is and not bother deleting. Tools like Valgrind might complain though.