在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函数从用户那里获得交互式输入吗? 如果有人可以帮助我,我将不胜感激!     
已邀请:
我假设ѭ1是您自己的包装
fgets
的函数,无论如何... 您的代码失败,因为它试图读取0个字节(
msg->len
的初始值)。另外,
msg->len
从不更新(按值传递给to1ѭ)。     
复活! 我想我已经找到了解决我问题的方法。我所做的是将输入读取到缓冲区,然后将缓冲区分配给struct成员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。 感谢大家的答复...     
复活,调试使我找到了下一个解决方案。谢谢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);
} 
它可以很好地打印出所有内容... 谢谢大家的意见!     

要回复问题请先登录注册