在 for 循环中崩溃
Crashing in a for loop
我正在尝试写入文本文件。当我不使用 for 循环时,我可以写得很好,但是当我实现它以将所有数组写入文件时,它会崩溃。这是我的代码:
void writeFile(void)
{
char *fileName[30];
cout << "enter a filename";
cin >> *fileName;
ofstream myfile;
myfile.open (*fileName);
int p;
for(p = 0; p <= i; p++)
{
myfile << right << setw(4) << setfill('0') << packet[i].getSource() << ":";
myfile << right << setw(4) << setfill('0') << packet[i].getDest() << ":";
myfile << right << setw(4) << setfill('0') << packet[i].getType() << ":";
myfile << right << setw(4) << setfill('0') << packet[i].getPort() << endl;
}
有什么想法我哪里出错了吗?
>fileName
是一个由 30 个未初始化的 char 指针组成的数组。 *fileName
与 filename[0]
相同,后者是一个指向字符的未初始化指针。除了为其分配有效值外,不能将此指针用于任何操作。但是,您并没有这样做,而是尝试读取数据,从而产生可预见的灾难性后果。
简而言之,您根本不应该在C++中使用任何指针,而是根据您的情况使用std::string
:
std::string fileName;
if (!(std::cin >> fileName)) { /* I/O error, die */ }
// ...
(也许你的意思是fileName
一个包含 30 个字符的数组:char fileName[30];
。但不要那样做。即使它可能有效,它也非常可怕。
这里还有一件事有点狡猾:
for(p = 0; p <= i; p++)
你可能想要
for(p = 0; p < i; p++)
这样您就不会尝试取消对数组末尾的引用
可能写得更好
for (int p = 0; p != i; ++p)
根据Moo和Koenig,这是推荐的形式:http://www.drdobbs.com/cpp/184402072
我也不会使用 char *
从cin
读取,使用 std::string
来存储您的字符串和输入,如果在主 writeFile
函数范围之外不需要内存,则无需new
内存。字符串也支持动态调整大小,因此您无需将其初始化为任何大小,这是我用谷歌搜索的第一个示例来帮助您理解
为什么要使用"C 方式"来存储文件名?而且你用错了方式:字符**。只需声明以下内容会更容易:
std::string fileName;
while(!std::cin >> fileName);
ofstream myfile(fileName.c_str());
您还在循环中使用 i,但正在迭代 p,我认为这不是您想要做的......
相关文章:
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- For 循环在尝试读取数组 c++ 时程序崩溃
- 在 mmap'ed 区域上使用 memcpy 崩溃,for 循环不会
- C++代码崩溃并具有无限循环
- 程序因 While 循环而崩溃
- 当通过tcp接收编码图像的消息时,zmq在第二个循环中崩溃
- 递归导致程序崩溃,但 while 循环中的相同概念不是来自C++析构函数
- 我需要做一个空函数循环回来,而不会让它崩溃或跳过
- 布雷森汉姆线抽屉在渲染任何内容之前经过一定循环后崩溃
- 循环导致文件崩溃
- 使用自动循环时代码崩溃
- std::在循环中计算重复字符时擦除崩溃
- 当循环崩溃时,不向数组添加单词
- 程序在循环执行后崩溃
- 控制台在结束时崩溃(循环)未超出限制错误
- 这个循环如何使我的程序崩溃
- 模态qprogressdialog :: setValue()导致嵌套事件循环崩溃
- 文字背景颜色更改后C 中的许多循环崩溃!为什么
- 对于循环,大量崩溃了
- 尝试拆分循环链表.显示输出但崩溃.在 IDEone 中显示运行时错误