|
ファイルから読み込んだレコードを構造体に入れてqsotでソート
しています。
読み込むレコードの量は、決まっておらず、読み込んだ量に応じて
格納する構造体の領域を大きくしていこうとしているのですが、
読み込んだ値を構造体に設定するところで落ちてしまいます。
どこがわるいのでしょうか。
また、構造体に対しても領域確保できるのでしょうか。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int comp(const void *p1, const void *p2)
{
struct { char *code ; int count ; } *a = p1 ;
struct { char *code ; int count ; } *b = p2 ;
int diff ;
diff = strcmp(a->code, b->code) ;
return diff ? diff : a->count - b->count ;
}
main(argc,argv)
int argc ;
char *argv[] ;
{
struct { char *code ; int count ; } **table ;
char buf[1024] ;
char code[1024] ;
char num[4] ;
int i = 0 ;
int n = 0 ;
int size = 1024 ;
table = NULL ;
while (fgets(buf, sizeof buf, stdin)) {
buf[strlen[buf]) = '\0' ;
pr = strtok(buff, ",") ;
if(pr) strcpy(code, pr) ;
pr = strtok(NULL, ",") ;
if(pr) strcpy(num, pr) ;
if (table == NULL || n >= size) {
line = realloc(table, (size *= 2) * sizeof(sizeof(struct { char *code ; int count ; }))) ;
if (line == NULL) {
return puts("out of memory"), 1 ;
}
}
i=n;
table[i]->code = strdup(code) ;
table[i]->count = atoi(count) ;
n++ ;
}
qsort(table, n, sizeof(struct { char *code ; int count ; }), comp) ;
for (i = 0 ; i < n ; i++) {
printf("%s,%d\n",table[i].code,table[i].count) ;
}
return 0 ;
}
|