Показать сообщение отдельно

  #2  
Старый 17.12.2008, 01:55
izlesa
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме:
414311

Репутация: 110
Отправить сообщение для izlesa с помощью ICQ
По умолчанию

да проблема с буфЕрами это пять ^______^
используй динамический двумерный массив + в конце исходного буфера ставь дополнительный символ '\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..
 
Ответить с цитированием