使用"ifstream"时出现分段错误
Segmentation fault while using "ifstream"
我试图在文件中获得文本的一部分。我使用了"ifstream":
#include <fstream>
void func(){
char *myString;
ifstream infile;
infile.open("/proc/cpuinfo");
while (infile >> myString){
if (!strcmp(myString,"MHz"))
break;
}
}
,我得到一个"分割错误"。有人知道为什么吗?
您没有为myString
分配内存。使用std::string
。或者最好使用其他语言,如python、perl或unix utils,如grep、awk、sed。
因为目标值应该是:
std::string myString;
而不是char*
。可以使用char*
,但是您必须确保它首先指向足够大的东西。(在您的例子中,它没有指向您忘记初始化它的任何地方。)并定义"足够大";是很重要的,因为你不知道下一个单词的大小,直到你读了它。
你知道,c++有一个字符串类是有原因的。这是因为使用char指针既麻烦又容易出错。
infile >> myString
将从文件中读取myString
指向的*。它是一个未初始化的指针,它指向一些随机的垃圾地址。
如果你绝对想要使用char指针而不是字符串,你必须分配一个可以读取数据的缓冲区。
但同样的解决方案是将其完全替换为std::string
。
因为您没有为myString
分配内存。这个问题的快速解决方案是使用std::string
而不是c风格的char*
字符串,它可以进行内存管理,因此您不必。
出现错误的原因如下:
当你声明char *myString
时,你是在创建一个指向字符的指针。然而,你没有初始化这个指针指向任何东西,所以它可以指向内存中的任何地方。当你做infile >> myString
时,你要在内存中一个未指定的位置写一堆字符。这个位置恰好是程序的重要部分,导致程序崩溃。
char myString[256]
也可以很好地编译。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void func()
{
char myString[256] ;
ifstream infile;
infile.open("/proc/cpuinfo");
while ( ! infile.eof() )
{
infile >> myString;
cout<<myString<<" n";
if (! strcmp(myString,"MHz") )
{
infile.close();
break;
}
}
infile.close();
cout<<" n";
}
int main()
{
func();
return 0;
}
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?