이것은 파일의 URL 목록을 읽고 URL의 여러 부분을 분리하려고하는 내 C 코드입니다.이 코드는 거친 구문 분석이며 특별한 경우에 대해 신경 쓰지 않습니다. 오류가 sscanf() 문을, 내가 이것을 실행할 때 "세분화 FAULT".. 그리고 또한, 전체 URL은 "proto"문자열에 할당되고있다 .. 아무도 제발 문제를 알아낼 수 있습니다 .. 제발 그것은 급한 ..sscanf()를 사용하여 c에서 URL을 구문 분석하는 방법은 무엇입니까?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
# define BAG_SIZE 14
char bag[117][30];
void initbag()
{
strcpy(bag[0],"account");
strcpy(bag[1],"audit");
strcpy(bag[2],"ad");
strcpy(bag[3],"advertising");
strcpy(bag[4],"marketing");
strcpy(bag[5],"application");
strcpy(bag[6],"banking");
strcpy(bag[7],"barter");
strcpy(bag[8],"business");
strcpy(bag[9],"econo");
strcpy(bag[10],"commerce");
strcpy(bag[11],"communication");
strcpy(bag[12],"computer");
strcpy(bag[13],"processing");
}
/*
other bag[] values will be later copied
*/
void substr(char dest[10],char src[200],int start,int len)
{
int i,j;
for(i=start,j=0;i<start+len;i++,j++)
dest[j]=src[i];
dest[j]='\0';
}
int found(char* word)
{
int i;
for(i=0;i<BAG_SIZE;i++)
if((!strcmp(word,bag[i]))||(strstr(bag[i],word)!=NULL)) return 1;
return 0;
}
void main()
{
int i,j,k;
char buff[10],fullurl[100];
char proto[5],www[4],host[100],tokens[200],tld[4];
float feature[11];for(i=0;i<11;i++) feature[i]=0;
FILE *furl,*fop;
furl=fopen("bizurls.txt","r");
fop=fopen("urlsvm.txt","w");
initbag();
printf("\nbag initialised");fflush(stdout);
while(!feof(furl))
{
fscanf(furl,"%s",fullurl);
printf("%s",fullurl);
sscanf(fullurl,"%s://%s.%s.%s/%s\n",proto,www,host,tld,tokens);// this line isnt working properly
printf("2hi");fflush(stdout);
printf("proto : %s\nwww:%s\nhost :%s\ntld:%s\ntokens:%s\n",proto,www,host,tld,tokens);fflush(stdout);
for(i=4;i<=8;i++)
{
for(j=0;j<strlen(host)-i+1;j++)
{
substr(buff,host,j,i);
if(found(buff)) feature[i-3]++;
}
}
if((!strcmp(tld,"biz"))||(!strcmp(tld,"org"))||(!strcmp(tld,"com"))||(!strcmp(tld,"jobs")))
feature[0]=1;
else if((!strcmp(tld,"info"))||(!strcmp(tld,"coop"))||(!strcmp(tld,"net")))
feature[0]=0.5;
else
feature[0]=0;
for(i=4;i<=8;i++)
{
for(j=0;j<strlen(tokens)-i+1;j++)
{
substr(buff,tokens,j,i);
if(found(buff)) feature[i+2]++;
}
}
/*.biz · .com · .info · .name · .net · .org · .pro
.aero, .coop, .jobs, .travel */
for(i=0;i<11;i++) fprintf(fop," %d:%f",i,feature[i]);
fprintf(fop,"\n");
}
fflush(fop);
fclose(furl);
fclose(fop);
}
쪽 이죠 .- 야, 이것 참, 사람들은 하드 충분한 시간 전체 전원 정규식 엔진이 일이있다. scanf 형식의 문자열로는 매우 어려울 것이라고 생각합니다 :-) – paxdiablo
항상 * scanf 함수의 반환 값을 확인해야합니다. Kenny가 언급했듯이,'sscanf'는 URL 스캔을위한 잘못된 도구입니다. –
더 많은 코드를 게시 할 수 있습니까? 당신의 현이 얼마나 큽니까? 어떤 명령이 segfaults입니까? –