#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void ArraySize(FILE *fptr, int *maxLine, int *lineMaxChar);
void Initialize(char ***data, int maxLine, int lineMaxChar);
void FreeMalloc(char ***data, int maxLine);
int main(int argc, char *argv[])
{
FILE *fptr;
char **data;
int lineMaxChar = 0, maxLine = 0;
int i,j;
char buf[100];
if(argc == 2)
{
fptr
= fopen(argv
[1], "r"); ArraySize(fptr, &maxLine, &lineMaxChar);
Initialize(&data, maxLine, lineMaxChar);
for(i
= 0;fgets(data
[i
], lineMaxChar
, fptr
) != NULL
; i
++); {
fgets(data
[i
], lineMaxChar
, fptr
); }
FreeMalloc(&data, maxLine);
}
}
void ArraySize(FILE *fptr, int *maxLine, int *lineMaxChar)
{
int ch, count = 0;
while((ch
= fgetc(fptr
)) != EOF
) {
count++;
if(ch == '\n')
{
(*maxLine)++;
if(count > *lineMaxChar)
{
*lineMaxChar = count;
}
count = 0;
}
}
}
void Initialize(char ***data, int maxLine, int lineMaxChar)
{
int i;
*data
= calloc(maxLine
, sizeof(char *)); for(i = 0; i < maxLine; i++)
{
(*data
)[i
] = calloc(lineMaxChar
, sizeof(char)); }
}
void FreeMalloc(char ***data, int maxLine)
{
int i;
for(i = 0; i < maxLine; i++)
{
}
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0cmluZy5oPgoKdm9pZCBBcnJheVNpemUoRklMRSAqZnB0ciwgaW50ICptYXhMaW5lLCBpbnQgKmxpbmVNYXhDaGFyKTsKdm9pZCBJbml0aWFsaXplKGNoYXIgKioqZGF0YSwgaW50IG1heExpbmUsIGludCBsaW5lTWF4Q2hhcik7CnZvaWQgRnJlZU1hbGxvYyhjaGFyICoqKmRhdGEsIGludCBtYXhMaW5lKTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgICBGSUxFICpmcHRyOwogICAgIGNoYXIgKipkYXRhOwogICAgIGludCBsaW5lTWF4Q2hhciA9IDAsIG1heExpbmUgPSAwOwogICAgIGludCBpLGo7CiAgICAgY2hhciBidWZbMTAwXTsKCiAgICAgaWYoYXJnYyA9PSAyKQogICAgIHsKICAgICAgICAgZnB0ciA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CiAgICAgICAgIEFycmF5U2l6ZShmcHRyLCAmbWF4TGluZSwgJmxpbmVNYXhDaGFyKTsKICAgICAgICAgSW5pdGlhbGl6ZSgmZGF0YSwgbWF4TGluZSwgbGluZU1heENoYXIpOwogICAgICAgICByZXdpbmQoZnB0cik7CiAgICAgICAgIGZvcihpID0gMDtmZ2V0cyhkYXRhW2ldLCBsaW5lTWF4Q2hhciwgZnB0cikgIT0gTlVMTDsgaSsrKTsKICAgICAgICAgewogICAgICAgICAgICAgZmdldHMoZGF0YVtpXSwgbGluZU1heENoYXIsIGZwdHIpOwogICAgICAgICB9CiAgICAgICAgIEZyZWVNYWxsb2MoJmRhdGEsIG1heExpbmUpOwoKICAgICB9Cgp9Cgp2b2lkIEFycmF5U2l6ZShGSUxFICpmcHRyLCBpbnQgKm1heExpbmUsIGludCAqbGluZU1heENoYXIpCnsKICAgICBpbnQgY2gsIGNvdW50ID0gMDsKICAgICB3aGlsZSgoY2ggPSBmZ2V0YyhmcHRyKSkgIT0gRU9GKQogICAgIHsKICAgICAgICAgY291bnQrKzsKICAgICAgICAgaWYoY2ggPT0gJ1xuJykKICAgICAgICAgewogICAgICAgICAgICAgKCptYXhMaW5lKSsrOwogICAgICAgICAgICAgaWYoY291bnQgPiAqbGluZU1heENoYXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgKmxpbmVNYXhDaGFyID0gY291bnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgIH0KICAgICB9Cn0KCnZvaWQgSW5pdGlhbGl6ZShjaGFyICoqKmRhdGEsIGludCBtYXhMaW5lLCBpbnQgbGluZU1heENoYXIpCnsKICAgICBpbnQgaTsKICAgICAqZGF0YSA9IGNhbGxvYyhtYXhMaW5lLCBzaXplb2YoY2hhciAqKSk7CiAgICAgZm9yKGkgPSAwOyBpIDwgbWF4TGluZTsgaSsrKQogICAgIHsKICAgICAgICAgKCpkYXRhKVtpXSA9IGNhbGxvYyhsaW5lTWF4Q2hhciwgc2l6ZW9mKGNoYXIpKTsKICAgICB9Cgp9Cgp2b2lkIEZyZWVNYWxsb2MoY2hhciAqKipkYXRhLCBpbnQgbWF4TGluZSkKewogICAgIGludCBpOwogICAgIGZvcihpID0gMDsgaSA8IG1heExpbmU7IGkrKykKICAgICB7CiAgICAgICAgIGZyZWUoKCpkYXRhKVtpXSk7CiAgICAgfQogICAgIGZyZWUoKmRhdGEpOwp9