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];
我需要你的帮助.谢谢!
这导致缓冲区溢出:
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)
记住delete和delete[]什么是new或new[].
可以std::string使用流来读取文件内容.请参阅在C++中将整个文件读入std :: string的最佳方法是什么?.
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |