从文件中读取时的分段错误

时间:2013-11-05 23:44:29

标签: c++ file segmentation-fault

我正在尝试打印文件的最后10行。以下是我的代码,但由于fscanf而导致分段错误。使用gdb运行时,错误读取:vfscanf.c:没有这样的文件或目录。

#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

int main()
{
    FILE *fp = fopen("microfile.txt","r");
    char *c[10];
    int idx = 0;
    cout<<fp<<"\n";
    while(!feof(fp))
    {
        if(idx<10)
        {
            fscanf(fp,"%s",c[idx]);
            idx++;
        }
        else if(idx==10)
        {
            for(int i=0;i<idx-1;i++)
            {
                c[i] = c[i+1];
            }
            fscanf(fp,"%s",c[idx-1]);
        }
    }
    int i=0;
    while(i<10)
    {
        cout<<c[i]<<"\n";
        i++;
    }
}

1 个答案:

答案 0 :(得分:0)

问题的根源来自于此行上有指针的数组:

char* c[10];

稍后在程序中,您尝试为这些指针指定字符值。也许你的意思只是一组字符:

char c[10];

此外,建议使用标准库。尝试使用std::string和标准流,您的程序可以更易于维护:

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

int main()
{
    std::string s;

    s.assign(
        std::istreambuf_iterator<char>(std::ifsteam("microfile.txt").rdbuf()),
        std::istreambuf_iterator<char>());

    for (char c : s)
        std::cout << c << std::endl;
}