Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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/1/list/4.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++ 简单代码出现意外的运行时错误_C++ - Fatal编程技术网

C++ 简单代码出现意外的运行时错误

C++ 简单代码出现意外的运行时错误,c++,C++,有人能告诉我为什么我在下面给出的代码中遇到意外的运行时错误吗。它可以工作两次迭代,但不能超过两次 #include<iostream> #include<fstream> #include<string> using namespace std; void print(string hmm) { ofstream ko(hmm.c_str(),ios::trunc); ko<<"chacho";

有人能告诉我为什么我在下面给出的代码中遇到意外的运行时错误吗。它可以工作两次迭代,但不能超过两次

#include<iostream>
#include<fstream>
#include<string>

using namespace std;
void print(string hmm)
{
         ofstream ko(hmm.c_str(),ios::trunc);
         ko<<"chacho";
         ko.close();
}

int main(){
for(int i=0;i<5;i++)
{
        char *chat=new char;
        sprintf(chat,"%d%s",i,"_num.txt");
        string rat=chat;

        print(rat);
}

system("pause");
return 0;
}
#包括
#包括
#包括
使用名称空间std;
无效打印(字符串hmm)
{
流ko(hmm.c_str(),ios::trunc);
让开
这只分配一个字符。您的sprintf正在耗尽这个缓冲区

您也不会删除此分配,从而导致泄漏

这只分配一个字符。您的sprintf正在耗尽这个缓冲区


您也不会删除此分配,从而导致泄漏。

#定义BUF_LEN(256)…char*chat=new char[BUF_LEN];…dlete[]聊天,@ NeXeFood,一个定义根本不适合这个目的。C++中有很多更好的方法,也可以用一个新的需求方括号来分配一个数组。@ NeXOpple,<代码> const <代码>在你需要的函数中是比较好的,但是你可以在一个类中使用静态const或者在命名空间中使用const。E比定义好得多,就像编译器在启动和忽略范围之前的定义一样。如果有任何冲突,你会浪费一些时间来想清楚你得到的奇怪错误是什么。这里有一个链接,回答了一个以前回答的问题:谢谢你,克里斯:)你是对的。我没有用C++中的命名空间,你的方式。更好。#定义BUF#LEN(256)…char*chat=new char[BUF#LEN];…dlete[]聊天,@ NeXeFood,一个定义根本不适合这个目的。C++中有很多更好的方法,也可以用一个新的需求方括号来分配一个数组。@ NeXOpple,<代码> const <代码>在你需要的函数中是比较好的,但是你可以在一个类中使用静态const或者在命名空间中使用const。E比定义好得多,就像编译器在启动和忽略范围之前的定义一样。如果有任何冲突,你会浪费一些时间来想清楚你得到的奇怪错误是什么。这里有一个链接,回答了一个以前回答的问题:谢谢你,克里斯:)你是对的。我没有用C++中的命名空间,你的方式。这样更好。
char *chat=new char;