【问题标题】:Size of array using string length使用字符串长度的数组大小
【发布时间】:2020-01-10 08:02:18
【问题描述】:
我读到数组的大小应该在编译时知道。
如果我是对的,那么下面的代码不应该工作,但它正在编译而没有任何警告并且工作正常。
你能解释一下发生了什么吗?
std::string s = "ABCDEFGHIJ";
int n = s.length();
// declaring character array
char char_array[n + 1];
std::cout << sizeof(char_array) << std::endl;
//Actual result
11
【问题讨论】:
标签:
c++
arrays
string
c++11
【解决方案1】:
假设您使用的是g++,它是一个非标准的编译器扩展。要搜索的关键字是“变长数组”。
由于您没有解释您使用的编译器,我将展示一个示例,说明如何使用 g++ 使用 -pedantic 标志或显式启用 vla 警告来启用此类代码的错误/ 错误。
demo:/tmp$ cat ex.cc
#include <iostream>
#include <string>
int main() {
std::string s = "ABCDEFGHIJ";
char char_array[s.length() + 1];
std::cout << sizeof(char_array) << std::endl;
}
demo:/tmp$ cat ex.cc | g++ -x c++ -
demo:/tmp$ cat ex.cc | g++ -Werror=vla -x c++ -
<stdin>: In function ‘int main()’:
<stdin>:6:33: error: variable length array ‘char_array’ is used [-Werror=vla]
cc1plus: some warnings being treated as errors
demo:/tmp$ cat ex.cc | g++ -pedantic -x c++ -
<stdin>: In function ‘int main()’:
<stdin>:6:33: warning: ISO C++ forbids variable length array ‘char_array’ [-Wvla]
demo:/tmp$ g++ --version | head -n 1
g++ (Debian 8.3.0-6) 8.3.0