我必须制作一个可以接受这样输入的程序:
2012-01-20 10:50:52 127.0.0.1(via UDP: [127.0.0.1]:65008->[0.0.0.0]:0) TRAP, SNMP v1, community telros
SNMPv2-SMI::enterprises.3.1.1 Enterprise Specific Trap (1) Uptime: 73 days, 21:16:00.11
2012-01-20 10:50:53 127.0.0.1(via UDP: [127.0.0.1]:57487->[0.0.0.0]:0) TRAP, SNMP v1, community telros
SNMPv2-SMI::enterprises.3.1.1 Enterprise Specific Trap (1) Uptime: 73 days, 21:16:01.15
2012-01-20 10:50:54 127.0.0.1(via UDP: [127.0.0.1]:34207->[0.0.0.0]:0) TRAP, SNMP v1, community telros
SNMPv2-SMI::enterprises.3.1.1 Enterprise Specific Trap (1) Uptime: 73 days, 21:16:01.92
然后把它放到Postgres中:得到两行由空(\n
)行划分并放入db表中。
我要做的是:
const char *conninfo;
const char *paramValues[1];
char *str;
char *sql;
...
while(fgets(str, 126, stdin)) {
if (0 != strcmp(str,"\n")){
strcat(sql,str);
}else{
paramValues[0] = (const char *)sql;
res = PQexecParams(conn,
"insert into traps (trap_content, trap_timestamp) values ($1, localtimestamp);",
1,
NULL,
paramValues,
NULL,
NULL,
1);
sql = "";
}
}
但paramValues[0]
似乎在插入时为空,表格中出现空行。
如何才能在paramValues[0]
中的空字符串之前获得两个字符串?
我不擅长C,很抱歉,如果这是一个愚蠢的问题=)
答案 0 :(得分:1)
这一行:
sql = "";
将导致char *变量'sql'指向字符串文字“”的地址。用sql调用strcat(sql,str)现在指向这个文字的地址是不正确的;甚至可能是段错误。请尝试改为:
strcpy(sql, "");
或等效
sql[0] = 0
此外,您没有显示'sql'的定义位置,但它必须指向一个足够大的缓冲区,以容纳您预期遇到的相邻数量的行。