无法将文件读入char数组(一些指针问题,总是如此)

ali*_*ali 1 c++ arrays crash pointers char

是的,我有这样的问题,因为我总是很难按照指针操作.所以,我有这个简单的代码:

struct myfile {
    char* name;
    char* content;
    long size;
};

myfile this_file;

int main() {
    read();
    return 0;
}

void read() {
    output("Please, specify file name: ");
    cin >> (this_file.name = new char);
    FILE *stream;
    stream = fopen(code.name, "r");
    if (stream != NULL) {
        fseek(stream , 0, SEEK_END);
        myfile.size = ftell(codefile);
        myfile.content = new char[myfile.size];
        fseek(myfile, 0, SEEK_SET);
        if ((fread(myfile.content, 1, myfile.size, stream)) == 0) {
            fclose(codefile);
            cout << "File is empty!\n");
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

它正确获取文件的名称,它获取内容的大小但是当试图为content成员分配空间时程序崩溃,我知道这是一些指针问题,但是,一如既往,不记得/弄清楚是什么是吗.到达此行时崩溃:myfile.content = new char[myfile.size];

我需要你的帮助.谢谢!

hmj*_*mjd 6

这导致缓冲区溢出:

cin >> (this_file.name = new char);
Run Code Online (Sandbox Code Playgroud)

因为operator>>()将消耗字符到下一个空格字符并写入this_file.name只有足够空间的单个字符.

使用std::string(代替char*)std::getline():

std::string name;
if (std::getline(cin, name))
{
    // Use 'name'.
}
Run Code Online (Sandbox Code Playgroud)

如果您正在研究指针,则需要分配一个数组char并阻止读取超出分配的数组:

this_file.name = new char[32];
if (cin.getline(this_file.name, 32))
{
}
Run Code Online (Sandbox Code Playgroud)

记住deletedelete[]什么是newnew[].

可以std::string使用流来读取文件内容.请参阅在C++中将整个文件读入std :: string的最佳方法是什么?.