0

ファイルの最後の 10 行を印刷しようとしています。以下は私のコードですが、fscanf が原因でセグメンテーション違反が発生しています。gdb を使用して実行すると、次のエラーが表示されます: vfscanf.c: No such file or directory.

#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 に答える