Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在for循环中崩溃_C++_Loops_For Loop - Fatal编程技术网

C++ 在for循环中崩溃

C++ 在for循环中崩溃,c++,loops,for-loop,C++,Loops,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;

我正试图写入一个文本文件。当我不使用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;
    }
void writeFile(void)
{
字符*文件名[30];
cout>*文件名;
流文件;
myfile.open(*文件名);
INTP;

for(p=0;p
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];
。但是不要这样做。即使它可以工作,也非常糟糕。)

fileName
是一个包含30个未初始化的字符指针的数组。
*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++)
这是Moo和Koenig推荐的表格:


我也不会使用
char*
来读取
cin
,使用
std::string
来存储字符串和输入,如果在主
writeFile
函数的作用域之外不需要内存,则不需要
new
内存。字符串也支持动态调整大小,因此不需要将其初始化为任何值大小,这是我在谷歌上搜索的第一个帮助您的示例

这里还有一个稍微有点可疑的地方:

for(p = 0; p <= i; p++)
这是Moo和Koenig推荐的表格:

我也不会使用
char*
来读取
cin
,使用
std::string
来存储字符串和输入,如果在主
writeFile
函数的作用域之外不需要内存,则不需要
new
内存。字符串也支持动态调整大小,因此不需要将其初始化为任何值大小,这是我在谷歌上搜索的第一个示例,它帮助您

为什么要使用“C方式”来存储文件名?而您使用的方式是错误的:char**。声明:

std::string fileName;
while(!std::cin >> fileName);
ofstream myfile(fileName.c_str());
你也在循环中使用i,但在p上迭代,我想这不是你想要做的…

为什么你用“C方式”来存储文件名?你用错了方式:char**。声明:

std::string fileName;
while(!std::cin >> fileName);
ofstream myfile(fileName.c_str());

你也在循环中使用i,但在p上迭代,我想这不是你想要做的…

我是什么?它似乎没有在任何地方定义。当你引用
packet[i]
时,你可能是指
packet[p]
是的,这就是我的意思,鲍勃,谢谢你的提醒,还是不应该让它崩溃?对不起,我是全局的,初始化为0。
char*fileName[30];
是双指针。为什么?@Tibor:不,那不是双指针。这是一个指针数组。当然,它的用法有问题,
std::string fileName;if(!std::getline)(std::cin,fileName))throw std::runtime_error(“Read failed”);
更可取(不一定要抛出异常,但应该注意潜在的错误并相应地处理这种情况)。我是什么?它似乎在任何地方都没有定义。当您引用
数据包[i]时,它看起来像
你可能指的是
数据包[p]
是的,我就是这个意思,鲍勃,谢谢你提醒,还是不应该让它崩溃?对不起,我是全局的,初始化为0。
char*fileName[30]
是双指针。为什么?@Tibor:不,那不是双指针。它是指针数组。当然,它的使用是有问题的,
std::string fileName;如果(!std::getline(std::cin,fileName))抛出std::runtime_错误(“读取失败”);
会更好(不必抛出异常,但应注意潜在的错误并相应地处理情况).1对于经典的“没有为字符串添加任何空格,但无论如何都要将其删除”感谢您的回答!我已更改为字符串并删除了指针,但我收到了一个错误:错误:调用“std::basic_of stream::open(std::string&)时没有匹配的函数在旧C++中,没有一个从<代码>字符串 > <代码> >流> <代码>的构造函数。这已经被C++ 11固定,但是同时,也说“代码> STD::OFFROW F(文件名,CXString))
。很抱歉给您带来不便。+1对于经典的“没有为字符串添加任何空间,但无论如何都将其固定”感谢您的回答!我已更改为字符串并删除了指针,但我收到一个错误:错误:调用“std::basic_of stream::open(std::string&)”时没有匹配的函数在旧C++中,没有一个从<代码>字符串< /代码>中的<代码>流>代码>。这已经被C++ 11固定,但同时,也说“代码> STD::OFFROW F(文件名,CXString));< /代码>。