0

我正在尝试打印文件的最后 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++;
    }
}
4

1 回答 1

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;
}
于 2013-11-06T00:00:23.240 回答