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