[英]strcat in while
我必須制作一個可以接受這樣的輸入的程序:
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語言不好,如果這是一個愚蠢的問題,對不起=)
這行:
sql = "";
將導致char *變量'sql'指向字符串文字“”的地址。 然后用現在指向此立即數地址的sql調用strcat(sql,str)是不正確的。 甚至可能出現段錯誤。 請嘗試:
strcpy(sql, "");
或同等
sql[0] = 0
另外,您沒有顯示“ sql”的定義位置,但是它必須指向一個緩沖區,該緩沖區足夠大以容納您希望遇到的盡可能多的相鄰行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.