问题描述
|
我正在编写一个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,(size_t) msg->allocated_len);
}
它可以很好地打印出所有内容...
谢谢大家的意见!