Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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++ 将两个满是数字的文件合并为第三个已排序的文件。文件名和cin问题_C++_Arrays_String_Char_Cin - Fatal编程技术网

C++ 将两个满是数字的文件合并为第三个已排序的文件。文件名和cin问题

C++ 将两个满是数字的文件合并为第三个已排序的文件。文件名和cin问题,c++,arrays,string,char,cin,C++,Arrays,String,Char,Cin,我有以下代码 ^完整代码 //the issue - this throws a Segmentation fault char *inname1 = "HW11F1.txt"; cin >> inname1; ifstream infile1(inname1); 作业如下。。 “编写一个程序,将数字合并到两个文件中,并将所有数字写入一个 第三个文件。每个输入文件都包含一个int类型的数字列表,按从 从最小到最大。程序运行后,输出文件将包含所有 一个较长列表中两个输入文件中的数字

我有以下代码

^完整代码

//the issue - this throws a Segmentation fault
char *inname1 = "HW11F1.txt";
cin >> inname1;
ifstream infile1(inname1);
作业如下。。 “编写一个程序,将数字合并到两个文件中,并将所有数字写入一个 第三个文件。每个输入文件都包含一个int类型的数字列表,按从 从最小到最大。程序运行后,输出文件将包含所有 一个较长列表中两个输入文件中的数字,按从最小到最大的顺序排序。 您的程序应该定义一个使用两个输入文件流和 输出文件流将显示为三个参数。“

我有它的默认文件名的工作刚刚好,一切似乎都工作,我希望它。问题是当我尝试在Name1中执行cin>>时


程序因分段错误(核心转储)而崩溃。你知道我做错了什么,或者怎么解决吗?提前感谢。

问题是inname1没有正确分配。如果改为使用std::string(正如Kiril Kirov所建议的),它将在复制之前分配必要的字节量来存储来自cin的输入

char *inname1 = "HW11F1.txt";
这使得
inname1
指向只读字符literal
“HW11F1.txt”

这会尝试读入该文本,当然会失败(该文本可能存储在只读内存中)

参见使用C++而非C时,应尽量避免C样式字符串,并使用<代码> STD::String < /C> > .< /P> 在C++11之前,文件流构造函数只接受C样式的字符串,因此您必须修改流构造,如下所示:

ifstream infile1(inname1.c_str());

好吧,这就是我修复它的方法

#include <string> 
#include <iostream>

std::string inname1 = "HW11F1.txt";
std::string inname2 = "HW11F2.txt";
std::string inname3 = "output.txt";
cin >> inname1; 

//blah blah blah

std::ifstream infile1 (inname1.c_str());

//blah blah blah

std::ofstream outfile (inname3.c_str());
outfile.open(inname3.c_str());
#包括
#包括
std::string inname1=“HW11F1.txt”;
std::string inname2=“HW11F2.txt”;
std::string inname3=“output.txt”;
cin>>inname1;
//废话废话
std::ifstreaminfile1(inname1.c_str());
//废话废话
标准::流出管(inname3.c_str());
outfile.open(inname3.c_str());
这里是最后一件事的粘贴箱(好吧,手头的问题的最后一件是固定的)


感谢所有帮助过你的人。Stackoverflow似乎总能救我的命。

使用
std::string
而不是
char*
。请直接在问题中发布代码,如果程序相当长,请去掉任何不必要的代码,直到得到一个我们可以复制并查看错误的最小测试用例。(出于某种原因,pastebin对我来说被屏蔽了)。@KirilKirov
可能很少使用,但它和
|
一样标准@KirilKirov不,它不是。它仍然是完全合法的,没有被弃用。@user2993567不,它不好。根据堆栈溢出策略,所有问题和答案都应该是自包含的。外部链接可以用于非必要的补充材料,但没有外部链接,每篇文章仍然有意义。-我刚刚将char*inname3更改为std::string inname3(适用于所有三种类型),它会抛出此错误。@user2993567查看我对该问题的最新评论。使用
c_str()
#include <string> 
#include <iostream>

std::string inname1 = "HW11F1.txt";
std::string inname2 = "HW11F2.txt";
std::string inname3 = "output.txt";
cin >> inname1; 

//blah blah blah

std::ifstream infile1 (inname1.c_str());

//blah blah blah

std::ofstream outfile (inname3.c_str());
outfile.open(inname3.c_str());