Имя пользователя:
Пароль:
 

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

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Вы не выделяет память под хранение строк. Куда по-Вашему это всё должно сваливаться? Посмотрите в сторону malloc/calloc.

Добавлено:

Вот стандартный пример из man vprintf. Это почти то что Вам надо.
Код: Выделить весь код
... 
Указание достаточно большой строки и ее вывод (код корректен для обеих версий: glibc 2.0 и glibc 2.1): 
#include <stdio.h> 
#include <stdlib.h> 
#include <stdarg.h> 
char * 
make_message(const char *fmt, ...) { 
/* необходимо не более 100-а байтов. */ 
int n, size = 100; 
char *p; 
va_list ap; 
if ((p = malloc (size)) == NULL) 
  return NULL; 
while (1) { 
  /* Попытайтесь произвести печать в pазpешенном пpостpанстве. */ 
  va_start(ap, fmt); 
  n = vsnprintf (p, size, fmt, ap); 
  va_end(ap); 
  /* Если выполнено, возвpатить стpоку. */ 
  if (n > -1 && n < size) 
    return p; 
  /* Произвести повторную попытку, с пространством большего размера. */ 
  if (n > -1)    /* glibc 2.1 */ 
    size = n+1; /* Это то, что необходимо */ 
  else           /* glibc 2.0 */ 
    size *= 2;  /* Удвоить стаpый pазмеp */ 
  if ((p = realloc (p, size)) == NULL) 
    return NULL; 
  } 
}
...
Проанализируйте данный код.

Отправлено: 12:33, 14-05-2004 | #6