首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcat in while

strcat in while
EN

Stack Overflow用户
提问于 2012-01-20 14:58:42
回答 1查看 474关注 0票数 0

我必须编写一个程序,它可以接受这样的输入:

代码语言:javascript
复制
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表中。

我想要做的是:

代码语言:javascript
复制
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语言,所以如果这是一个愚蠢的问题,我很抱歉=)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-20 15:31:24

这一行:

代码语言:javascript
复制
sql = "";

将导致char*变量'sql‘指向字符串文字"“的地址。然后使用sql调用strcat(sql,str)并指向该文本的地址是不正确的;这甚至可能会出现segfault。相反,尝试:

代码语言:javascript
复制
strcpy(sql, "");

或等同于

代码语言:javascript
复制
sql[0] = 0

此外,您没有显示“sql”的定义位置,但它必须指向一个足够大的缓冲区,以容纳您期望遇到的尽可能多的相邻行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8937827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档