【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 2014-07-15
      相关资源
      最近更新 更多