strcat в то время как - PullRequest
       2

strcat в то время как

0 голосов
/ 20 января 2012

Я должен сделать программу, которая может принимать ввод, как это:

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) строкой, и поместите их в таблицу базы данных.

я пытаюсь сделать следующее:

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, так что извините, если это глупый вопрос =)

1 Ответ

1 голос
/ 20 января 2012

Эта строка:

sql = "";

заставит переменную char * sql указывать на адрес строкового литерала "". Неверно вызывать strcat (sql, str), а sql теперь указывает на адрес этого литерала; это может даже segfault. Попробуйте вместо:

strcpy(sql, "");

или эквивалентно

sql[0] = 0

Кроме того, вы не показываете, где определяется «sql», но он должен указывать на буфер, достаточно большой, чтобы вместить столько соседних строк, сколько вы ожидаете встретить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...