報錯 storage size of 'rec' isn't known
#include<stdio.h>
#include<string.h>
int main(void)
{
FILE *fp;
fp=fopen("access.log","r+");//打開檔案
if(!fp)
{
printf("false\n");
return -1;//直接回傳
}
else{
printf("true\n");
}//判斷檔案是否成功打開
char line[2048];
int x,j,j_pos,j_pos1;
int lines=0;
int pos[9],pos1[9];
char s='[';
char s1=']';
struct record rec;
while((fgets(line,2048,fp))!=NULL)
{
x=strlen(line);
j_pos=0,j_pos1=0;
for(j=0;j<x;j++)
{
if(line[j]==s)
{
pos[j_pos]=j;
j_pos++;
}
if(line[j]==s1)
{
pos1[j_pos1]=j;
j_pos1++;
}
}
}
strncpy_s(rec.method,sizeof(rec.method),line+pos[0]+1,pos1[0]-pos[0]-1);
strncpy_s(rec.ip,sizeof(rec.ip),line+pos[1]+1,pos1[1]-pos[1]-1);
strncpy_s(rec.protocol,sizeof(rec.protocol),line+pos[2]+1,pos1[2]-pos[2]-1);
strncpy_s(rec.time,sizeof(rec.time),line+pos[3]+1,pos1[3]-pos[3]-1);
strncpy_s(rec.add,sizeof(rec.add),line+pos[4]+1,pos1[4]-pos[4]-1);
strncpy_s(rec.page,sizeof(rec.page),line+pos[5]+1,pos1[5]-pos[5]-1);
strncpy_s(rec.port,sizeof(rec.port),line+pos[6]+1,pos1[6]-pos[6]-1);
strncpy_s(rec.status,sizeof(rec.status),line+pos[7]+1,pos1[7]-pos[7]-1);
strncpy_s(rec.exploer_info,sizeof(rec.exploer_info),line+pos[8]+1,pos1[8]-pos[8]-1);
if(line[strlen(line)-1]=='\n')
{
lines++;
} int fclose(FILE *fp);//關閉檔案
return 0;
}
uj5u.com熱心網友回復:
struct record
這個結構體宣告在哪里?沒有看到呢。
uj5u.com熱心網友回復:
生命后也是報錯,并且會新增錯誤,原錯誤還存在
uj5u.com熱心網友回復:
因為IDE不支持strncpy_s()函式,所以我沒法看運行結果,文字說明見注釋,供參考:#include<stdio.h>
#include<string.h>
struct record //結構體
{
char method[255];
char ip[255];
char protocol[255];
char time[255];
char add[255];
char port[255];
char page[255];
char status[255];
char exploer_info[255];
};
int main(void)
{
FILE *fp;
fp=fopen("access.log","r+");//打開檔案
if(!fp)
{
printf("false\n");
return -1;//直接回傳
}
else{
printf("true\n");
}//判斷檔案是否成功打開
char line[2048];
int i=0,x,j,j_pos,j_pos1;//int lines=0; //這個變數沒用到
int pos[9],pos1[9];
char s='[', s1=']';
struct record rec[4096];//預設檔案有4096行
while((fgets(line,2048,fp))!=NULL)
{
x=strlen(line);
j_pos=0,j_pos1=0;
for(j=0;j<x;j++)
{
if(line[j]==s)//'[' 開始位置
{
pos[j_pos]=j;
j_pos++;
}
if(line[j]==s1)//']' 結束位置
{
pos1[j_pos1]=j;
j_pos1++;
}
}
//strncpy_s(char * str2, int size2, char * str1, int size1);//這里char * str1, int size1 兩個值樓主自己除錯
strncpy_s(rec[i].method,sizeof(rec[i].method),line+pos[0]+1,pos1[0]-pos[0]-1);
strncpy_s(rec[i].ip,sizeof(rec[i].ip),line+pos[1]+1,pos1[1]-pos[1]-1);
strncpy_s(rec[i].protocol,sizeof(rec[i].protocol),line+pos[2]+1,pos1[2]-pos[2]-1);
strncpy_s(rec[i].time,sizeof(rec[i].time),line+pos[3]+1,pos1[3]-pos[3]-1);
strncpy_s(rec[i].add,sizeof(rec[i].add),line+pos[4]+1,pos1[4]-pos[4]-1);
strncpy_s(rec[i].page,sizeof(rec[i].page),line+pos[5]+1,pos1[5]-pos[5]-1);
strncpy_s(rec[i].port,sizeof(rec[i].port),line+pos[6]+1,pos1[6]-pos[6]-1);
strncpy_s(rec[i].status,sizeof(rec[i].status),line+pos[7]+1,pos1[7]-pos[7]-1);
strncpy_s(rec[i].exploer_info,sizeof(rec[i].exploer_info),line+pos[8]+1,pos1[8]-pos[8]-1);
i++;
//if(line[strlen(line)-1]=='\n')
//{
//lines++;
//}
}
fclose(fp);//關閉檔案
//全部讀入rec[i]陣列中,接下去處理的代碼加入
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/262632.html
標籤:C語言
下一篇:C語言
