C++ 对字符数组大小使用整数变量

C++ 对字符数组大小使用整数变量,c++,arrays,string,io,fstream,C++,Arrays,String,Io,Fstream,我正在尝试使用fstream读取文本文件,然后将字符串转换为字符数组。但是,当我创建一个整数“n”即字符串的大小加1时,我不能用它来初始化数组的大小。我收到一条消息说,“表达式必须有一个常量值。” 我试图读取的文本文件只是说,“这是一条消息”。它有17个字符长。当我输入数字18(char messageArray[18])时,一切正常。但我希望能够根据我的短信长度传递一个值 #include <iostream> #include <fstream> #include &

我正在尝试使用fstream读取文本文件,然后将字符串转换为字符数组。但是,当我创建一个整数“n”即字符串的大小加1时,我不能用它来初始化数组的大小。我收到一条消息说,“表达式必须有一个常量值。” 我试图读取的文本文件只是说,“这是一条消息”。它有17个字符长。当我输入数字18(char messageArray[18])时,一切正常。但我希望能够根据我的短信长度传递一个值

#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;


int main() {

// Read the message text file and save it to a string
    fstream newfile;
    string message;
    newfile.open("input.txt", ios::in);
    if (newfile.is_open()) {
        getline(newfile, message);
        newfile.close();
    }

// Convert the message string to an array of characters
    int n{};
    n = message.size() + 1;
    char messageArray[n];
    strcpy_s(messageArray, message.c_str());
    cout << messageArray << endl;



    


    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
//读取消息文本文件并将其保存为字符串
fstream新文件;
字符串消息;
open(“input.txt”,ios::in);
if(newfile.is_open()){
getline(新文件、消息);
newfile.close();
}
//将消息字符串转换为字符数组
int n{};
n=message.size()+1;
字符消息数组[n];
strcpy_s(messageArray,message.c_str());

CUT

不能这样做。数组变量的大小必须是C++中的编译时常数。


您也不需要这样做。
message
已经拥有一个以null结尾的动态数组。不需要将其复制到其他地方。如果需要字符串的副本,请创建另一个
std::string
对象。

C/C++中数组的大小必须是编译时常量。您应该动态分配缓冲区,或者只使用
std::向量。从文件读取的代码只读取一行。这是你的意图吗?@ USE7860670。C中的数组大小不需要编译时间常数。这个问题是关于C++的。@ ErReka NoviaC方言(可选)VLA支持不是C。@user7860670 VLA支持在C99中不是可选的。它在以后的C标准中可能是可选的,但无论是否可选,它仍然是标准C。这是有道理的。谢谢!