我正在编写一个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函数从用户那里获得交互式输入?
如果有人能帮助我,我将不胜感激!
答案 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);
}
它打印出来的一切都很好...... 谢谢大家的意见!