2012-02-03 64 views
0

嗨,这是一个非常简单的代码,我只是为C++文件I/O练习编写的。但是当我运行这个时,我得到了一个Segmentation Fault (core dumped)异常。 这里是我下面的代码:写入文件时核心转储?

​​

我不知道是哪里的问题,但错误信息“赛格故障(核心转储)”显示,输入输出文件名后。

谢谢

回答

2

cin >> filename将是不确定的行为,因为filename是未初始化的指针。

如果你想存储字符,你需要为它们分配空间。所以,你可以这样做:

char filename[150] = {0}; 
cin >> filename; // OK, you provide space for 149 characters. Will still break 
       // if more characters are provided by the user. 

或:

#include <string> 
std::string filename; // overloads operators >> and << with streams 
         // automatically performs memory management 
// std::cin >> filename; /* Would stop at first space */ 
std::getline(std::cin, filename); // better: will stop at any carriage return 
+0

喜这似乎是这个问题,但是当我改变'filename'是字符串,我有另外一个麻烦,当我通过文件名'File.open方法()',因为它需要常量char *但不是字符串。它甚至无法工作,当我尝试'static_cast '它。你有什么想法解决这个问题?谢谢 – 2012-02-03 06:06:48

+0

@Allan Jiang:'std :: string'的方法'c_str()'是你想得到'const char *'的东西。 'open(filename.c_str(),...)'请[读这里](http://en.cppreference.com/w/cpp/string/basic_string)引用的基类。 – Benoit 2012-02-03 06:08:32

+0

我看到谢谢你 – 2012-02-03 06:09:40

1

PLS分配一些内存用于文件名,UR仅使用ponter。 进行更改

char filename[50];