我有一个如下代码,它基本上会读取一个内容看起来像的文件
奥克兰,汉密尔顿,罗托鲁瓦,惠灵顿
0,125,235,660
125,0,110,535
235,110,0,460
660,535,460,0
现在我要做的是我要分离出第一行并将其存储在一个字符数组中,从第二行直到结束(基本上是矩阵)为二维整数数组并用逗号分割。到目前为止,我用逗号分割文件并存储到字符数组中,但无法从数组中获取元素数(即城市数)。而且我刚用fgets来读取第一行。有没有其他有效的方法来做到这一点?谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXFLDS 200
#define MAXFLDSIZE 32
void parse( char *record, char *delim, char arr[MAXFLDS][MAXFLDSIZE],int *fldcnt)
{
char*p=strtok(record,delim);
int fld=0,fld1=0;
while(p)
{
strcpy(arr[fld],p);
fld++;
p=strtok('\0',delim);
}
*fldcnt=fld;
}
int main(int argc, char *argv[])
{
char tmp[1024];
int fldcnt=0;
int j=0,k=0;
char arr[MAXFLDS][MAXFLDSIZE],arr1[MAXFLDS][MAXFLDSIZE];
int recordcnt=0;
FILE *in=fopen("C:\\Users\\Sharan\\Desktop\\cities.txt","r");
if(in==NULL)
{
perror("File open error");
exit(EXIT_FAILURE);
}
fgets(tmp,sizeof(tmp),in);
parse(tmp,",",arr1,&fldcnt);
k=sizeof(arr1)/sizeof(arr1[0]);
printf("arr size:%d",k);
for(j=0;j<fldcnt;j++)
{
printf("cities:%d\n",sizeof (arr1[j]));
}
while(fgets(tmp,sizeof(tmp),in)!=0)
{
int i=0,j=0;
recordcnt++;
parse(tmp,", ",arr,&fldcnt);
for(i=0;i<fldcnt;i++)
{
printf("%s\n",arr[i]);
}
}
fclose(in);
return 0;
}
答案 0 :(得分:1)
表达式
sizeof (arr1[j])
返回实际数组的大小,即MAXFLDSIZE
,而不是您放入其中的条目数。你必须用变量跟踪自己。