четверг, 30 июня 2011 г.

Аналог php file() тока более задроченная и крутая =)


#define BUFFER_ADD 256

struct sFileToArray
{
char ** strings;
int stringsNum;
};
int fileToArray(const char * fName, struct sFileToArray * stringsStruct)
{
FILE * fHandle = fopen(fName, "r");
int sizeOfArray = BUFFER_ADD;
char ** strings = (char **)calloc(sizeOfArray, sizeof(char *));
if (fHandle == NULL)
{
printf("Cannot open file");
return 1;
}
char ch;
int pos = 0;
int length = BUFFER_ADD;
int stringNum = 0;
strings[stringNum] = (char *)calloc(length, sizeof(char));
while ((ch = fgetc(fHandle)) != EOF)
{
if (ch != '\n')
{
if ((pos + 1) >= length)
{
length += BUFFER_ADD;
strings[stringNum] = (char *)realloc(strings[stringNum], (length * sizeof(char)));
}
strings[stringNum][pos++] = ch;
strings[stringNum][pos] = 0;
continue;
}
pos = 0;
length = BUFFER_ADD;
if ((stringNum + 1) >= sizeOfArray)
{
sizeOfArray += BUFFER_ADD;
strings = (char **)realloc(strings, (sizeOfArray * sizeof(char *)));
}
strings[++stringNum] = (char *)calloc(length, sizeof(char));
}
stringsStruct->strings = strings;
stringsStruct->stringsNum = stringNum;
return stringNum;
}

размер файла


int fileSize(FILE * fHandle)
{
if (fHandle == NULL)
{
printf("Cannot open file");
return -1;
}
fseek(fHandle, 0, SEEK_END);
int sizeOfArray = ftell(fHandle);
fseek(fHandle, 0, SEEK_SET);
return sizeOfArray;
}

вторник, 28 июня 2011 г.

Безлимитный прием текста


#include ‹stdlib.h›
#include ‹stdio.h›
#include ‹string.h›

#define BUFFER_ADD 8

int getcEx(char * str);

int main()
{
char * str = (char *)calloc(BUFFER_ADD, sizeof(char));
getcEx(str);
printf(str);
free(str);
return 0;
}

int getcEx(char * str)
{
char ch;
int pos = 0, length = strlen(str);

while ((ch = getc(stdin)) != '\n')
{
if ((pos + 1) >= length)
{
length += BUFFER_ADD;
str = (char *)realloc(str, length);
}
str[pos++] = ch;
str[pos] = 0;
}
return 0;
}



принимаем от пользователя текст в консоли стандартными средствами, в неограниченных(пока не кончиться вся память) количествах.