g_字符串_truncate()上的分段错误?

g_字符串_truncate()上的分段错误?,c,segmentation-fault,glib,C,Segmentation Fault,Glib,在C中尝试以下操作时: g_string_printf(qbuf,"INSERT INTO inbox (number, smsdate, text) VALUES ('%s','%04d-%02d-%02d %02d:%02d:%02d', '%s')", xmx.remote.number, xmx.smsc_time.year, xmx.smsc_time.month, xmx.smsc_time.day,

在C中尝试以下操作时:

g_string_printf(qbuf,"INSERT INTO inbox (number, smsdate, text) VALUES ('%s','%04d-%02d-%02d %02d:%02d:%02d', '%s')",
          xmx.remote.number,
          xmx.smsc_time.year,
          xmx.smsc_time.month,
          xmx.smsc_time.day,
          xmx.smsc_time.hour,
          xmx.smsc_time.minute,
          xmx.smsc_time.second,
          xmx.user_data[0].u.text);
我看到以下崩溃:

Program received signal SIGSEGV, Segmentation fault.
0x00984809 in g_string_truncate () from /lib/libglib-2.0.so.0
(gdb) 
为什么会发生这种情况?调用g_string_printf()之前是否有初始化

从第2帧:

(gdb) frame 2
#2  0x08049ba8 in fetching_phone (unit=0x807cd80) at main.c:152
152           g_string_printf(qbuf,"INSERT INTO inbox (number, smsdate, text) VALUES ('%s','%04d-%02d-%02d %02d:%02d:%02d', '%s')",
(gdb) ptype xmx.remote.number
type = char [40]
(gdb) ptype xmx.smsc_time.year
type = int
(gdb) ptype xmx.smsc_time.month
type = int
(gdb) ptype xmx.smsc_time.day
type = int
(gdb) ptype xmx.smsc_time.hour
type = int
(gdb) ptype xmx.smsc_time.minute
type = int
(gdb) ptype xmx.smsc_time.second
type = int
(gdb) ptype xmx.user_data[0].u.text
type = unsigned char [1601]
(gdb) 

但是,我还是找不到问题所在

可能是“%s”字段的指针不正确。 在运行gdb时,您可以执行以下操作:

(gdb) bt
...trace...
# see the frame # of your call to g_string_printf()
(gdb) frame 5 # considering it was 5
(gdb) print xmx.remote.number
(gdb) print xmx.user_data[0].u.text
(gdb) print *xmx.remote.number
(gdb) print *xmx.user_data[0].u.text
或者您也可以检查类型(是
xmx.remote.number
a指针?)


“%s”字段的指针可能不正确。 在运行gdb时,您可以执行以下操作:

(gdb) bt
...trace...
# see the frame # of your call to g_string_printf()
(gdb) frame 5 # considering it was 5
(gdb) print xmx.remote.number
(gdb) print xmx.user_data[0].u.text
(gdb) print *xmx.remote.number
(gdb) print *xmx.user_data[0].u.text
或者您也可以检查类型(是
xmx.remote.number
a指针?)


您是否初始化了qbuf

GString *qbuf = g_string_new("");

您是否初始化了qbuf

GString *qbuf = g_string_new("");

什么是g_string_printf?id xmx.remote.number a String?@b参数:他说的是
glib
:如何声明/定义
qbuf
xmx
?您是如何初始化qbuf的?我们可能需要更多的信息和代码来帮助任何人。如果您想提供更多信息,请在将来编辑/更新您的问题。什么是g_string_printf?id xmx.remote.number a String?@b参数:他说的是
glib
:如何声明/定义
qbuf
xmx
?您是如何初始化qbuf的?我们可能需要更多的信息和代码来帮助任何人。如果您想提供更多信息,请在将来编辑/更新您的问题。