получить интерактивный ввод, используя функции glib в C - PullRequest
1 голос
/ 27 апреля 2011

Я пишу библиотеку c, но прежде чем я хочу проверить функции. Итак, я делаю следующее:

int main(void)
{
GString *msg = NULL;
msg = g_string_sized_new(256);
printf ("Insert a string (255 characters at most): ");
do_fgets((char *) msg->str, (size_t) msg->len, stdin);
printf("msg->allocated_len = %u \n", (size_t) msg->allocated_len);
printf("msg->len = %u \n", (size_t) msg->len);

return 0;
}

компиляция в порядке, но программа выводит следующее: msg-> alloc_len = 512 msg-> len = 0

Почему это? Есть ли другой способ получить интерактивный ввод от пользователя, используя функции glib?

Буду благодарен, если кто-нибудь сможет мне помочь!

Ответы [ 3 ]

1 голос
/ 27 апреля 2011

Я предполагаю, что do_fgets - это ваша собственная функция обтекания fgets, в любом случае ...

Ваш код не работает, поскольку он пытается прочитать 0 байтов (начальное значение msg->len).Кроме того, msg->len никогда не обновляется (оно передается do_fgets по значению).

0 голосов
/ 28 апреля 2011

Воскрешение, отладка привели меня к следующему решению.Спасибо Hasturkun за вашу помощь, я хотел опубликовать свой ответ со вчерашнего дня, но новые участники не могут ответить на их вопросы до истечения 8 часов.Решение заключается в следующем:

int main(void)
{
  GString *msg = NULL;
  gchar *p;
  gchar buf[256];

  msg = g_string_sized_new(256);
  printf ("Enter a message (255 characters at most): ");
  p = fgets(buf, sizeof(buf), stdin);
  g_string_assign(msg, buf);
  printf("msg->str = [%s] \n", (char *) msg->str);
  printf("msg->len = %u \n", (size_t) msg->len);
  printf("msg->allocated_len = %u \n", (size_t) msg->allocated_len);
} 

И это очень хорошо распечатывает все ... Спасибо всем за ваши комментарии!

0 голосов
/ 28 апреля 2011

Resurection! Я думаю, что нашел решение моего вопроса. Что я сделал, так это прочитал ввод в буфер, а затем назначил буфер члену структуры src, и все в порядке. Примерный код:

int main(void)
{
  GString *msg = NULL;
  gchar *p;
  gchar buf[256];
  msg = g_string_sized_new(256);
  printf ("Enter a message (255 characters at most): ");
  p = fgets(buf, sizeof(buf), stdin);
  g_string_assign(msg, buf);
  printf("msg->str = [%s] \n", (char *) msg->str);
  printf("msg->len = %u \n", (size_t) msg->len);
  printf("msg->allocated_len = %u \n", (size_t) msg->allocated_len);
  return 0;
}

Так распечатывается:

msg->str = [this is my message] 
msg->len = 19 
msg->allocated_len = 512

Странно только то, почему alloc_len равен 512 вместо 256. Спасибо всем за ответ ...

...