
17.12.2008, 01:55
|
|
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме: 414311
Репутация:
110
|
|
да проблема с буфЕрами это пять ^______^
используй динамический двумерный массив + в конце исходного буфера ставь дополнительный символ '\0' для обозначения конца. Сначала определяешь количество строк в буфере и выделяешь место под указатели на строки. Потом проходишь и считывая строки во временный буфер, определяешь размеры строк - выделяешь место под строку в массиве двумерном и копируешь туда строку из временного буфера. Если хочешь, завтра наверно напишу пример на plain C , а то сейчас спааааать надо ^______^
впрочем держи ^____^ написано через задницу, но работает.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int main(void)
{
char str[] = {'s','s','\0','a','\0','g','g','g','\0','\0'};
char **buffer;
char temp[100];
int flagstr = 0;
int counter = 0;
int count = 0;
int i, j;
for(i = 0;; i++)
{
if((str[i] != '\0') && (flagstr == 0))
{
counter++;
flagstr = 1;
}
else if(str[i] == '\0')
{
if(str[i + 1] == '\0') break;
flagstr = 0;
}
}
printf("%d\n", counter);
buffer = (char **)malloc(counter * sizeof(char **));
flagstr = 0;
count = counter;
counter = 0;
for(i = 0, j = 0;counter < count; i++, j++)
{
if(str[i] != '\0')
{
temp[j] = str[i];
flagstr = 1;
}
else
{
temp[j] = '\0';
buffer[counter] = (char *)malloc((strlen(temp)+1)*sizeof(char *));
memcpy(buffer[counter], temp, strlen(temp)+1);
buffer[counter][j]='\0';
counter++;
flagstr = 0;
j = -1;
}
}
for(i = 0; i < counter; i++)
{
printf("%s\n", buffer[i]);
free(buffer[i]);
}
free(buffer);
getch();
return 0;
}
Последний раз редактировалось izlesa; 17.12.2008 в 02:44..
|
|
|