int main(int argc, char* argv[]) {
char buffer[argc+1];
}int main(int argc, char* argv[]) {
char buffer[argc+1]; // =>Error (active) E0028 expression must have a constant value the value of parameter "argc" (declared at line ..) cannot be used as a constant
}constexpr int bl = argc+1;
char buffer[bl]; char buffer[argc+1]; - это VLA, который является стандартным только для C99.constexpr int bl = argc+1;constexpr существует и работает только во время трансляции кода. Откуда транслятору знать здесь и сейчас, с какими параметрами результирующий код будет выполняться на потенциальных миллиардах целевых устройств? void make_array(int l) {
char buffer[l+1];
...
}
void make_array(int l) {
char buffer[l+1];
...
}char buffer[l+1];, т.к. выделяется он на стеке, состояние которого и оставшийся размер ты не знаешь._malloca()[?]. Это - аналог alloca()[?] из GNU. Но к работе с _malloca() тебе нужно подойти ответственно, Майки снова начудили с ее интерфейсом, а все той же alloca() пользоваться решительно не рекомендуют через ругань транслятора. template <> string read(HANDLE handle, addrtype address, int len) {
char buffer[len]; // ->> вот тут этот косяк
if (ReadProcessMemory(handle, (LPVOID)address, &address, sizeof(addrtype), 0))
if (ReadProcessMemory(handle, (LPVOID)address, buffer, len, 0)) {
buffer[len] = '\0';
return buffer;
}
return "";
}<typename T> T* и <> void* и т.д) - на все случаи жизни, и все не работают под С++