#include<stdio.h>
#include<stdlib.h>
#include<dirent.h>
#include<string.h>
int main()
{
FILE *fin,*fout;
char dest[80]="/home/vivs/InexCorpusText/";
char file[30];
DIR *dir;
char c,state='1';
int len;
struct dirent *ent;
if((dir=opendir("/home/vivs/InexCorpus"))!=NULL)
{
while((ent=readdir(dir))!=NULL)
{
if(strcmp(ent->d_name,".") &&
strcmp(ent->d_name,"..") &&
strcmp(ent->d_name,".directory"))
{
len=strlen(ent->d_name);
strcpy(file,ent->d_name);
file[len-3]=file[len-1]='t';
file[len-2]='x';
//strcat(source,ent->d_name);
strcat(dest,file);
printf("%s\t%s\n",ent->d_name,dest);
fin=fopen(ent->d_name,"r");
fout=fopen(dest,"w");
while((c=fgetc(fin))!=EOF)
{
if(c=='<')
{
fputc(' ',fout);
state='0';
}
else if(c=='>')
state='1';
else if(state=='1')
{
if(c!='\n')
fputc(c,fout);
if(c=='.')
{
c=fgetc(fin);
if(c==' '||c=='\n'||c=='<')
{
fputc('\n',fout);
ungetc(c,fin);
}
else fputc(c,fout);
}
}
}
}
close(fin);
close(fout);
strcpy(dest,"/home/vivs/InexCorpusText/");
}
closedir(dir);
}
else
{
printf("Error in opening directory\n");
}
return 0;
}
Я пытался конвертировать xml-файлы в текст. Этот код просто удаляет теги и ничего больше. Когда я выполняю этот код примерно для 300 файлов, он не показывает никаких ошибок, но когда число достигает 500 или более, я получаю ошибку сегментации после обработки около 300 файлов.Ошибка сегментации при преобразовании большого количества XML-файлов в текст
Имеет ли ваша клавиатура '' ключ? –
2013-03-22 18:57:52
Можете ли вы быть уверены, что имена файлов не превысят 29 символов? В противном случае вы можете переполнить 'файл'. Кроме того, вам нужно проверить, что 'fopen' не возвращает' NULL'. – jazzbassrob
Вы пытались использовать отладчик, чтобы увидеть, где именно происходит ошибка? – Mike