使用C中的glib函数获取交互式输入

时间:2011-04-27 14:51:13

标签: c glib

我正在编写一个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-> allocated_len = 512 msg-> len = 0

为什么这样?有没有其他方法可以使用glib函数从用户那里获得交互式输入?

如果有人能帮助我,我将不胜感激!

3 个答案:

答案 0 :(得分:1)

我假设do_fgets是你自己的函数包装fgets,无论如何......

您的代码失败,因为它尝试读取0个字节(msg->len的初始值)。此外,msg->len永远不会更新(按值传递给do_fgets

答案 1 :(得分:0)

Resurection! 我想我找到了解决问题的方法。我所做的是读取缓冲区的输入,然后将缓冲区分配给struct member 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

唯一奇怪的是为什么allocated_len是512而不是256。 感谢大家的回复...

答案 2 :(得分:0)

复活,调试引领我进入下一个解决方案。感谢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);
} 

它打印出来的一切都很好...... 谢谢大家的意见!