簡體   English   中英

在一段時間內

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM