Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用libpq插入数据时出现问题_C_Postgresql - Fatal编程技术网

在c中使用libpq插入数据时出现问题

在c中使用libpq插入数据时出现问题,c,postgresql,C,Postgresql,我有一个代码,它从一些文件中读取数据,然后尝试将这些数据逐行添加到数据库中。问题是,当我运行程序时,它只是将第一行数据添加到数据库中,然后出现分段错误(堆芯转储) void将线路添加到线路数据库(char*line,PGconn*connection,PGresult*re){ 字符查询[50]; 分割线; sprintf(查询,“插入fp存储区数据测试”\ 值(%s、%s'、'%s'、%s、%s、%s、%s、%s、%s) ,拆分的_线[0],拆分的_线[1] ,分割线[2],分割线[3] ,分

我有一个代码,它从一些文件中读取数据,然后尝试将这些数据逐行添加到数据库中。问题是,当我运行程序时,它只是将第一行数据添加到数据库中,然后出现
分段错误(堆芯转储)

void将线路添加到线路数据库(char*line,PGconn*connection,PGresult*re){
字符查询[50];
分割线;
sprintf(查询,“插入fp存储区数据测试”\
值(%s、%s'、'%s'、%s、%s、%s、%s、%s、%s)
,拆分的_线[0],拆分的_线[1]
,分割线[2],分割线[3]
,分割线[4],分割线[5]
,分裂的_线[6],分裂的_线[7];
re=PQexec(连接、查询);
如果(PQresultStatus(re)!=PGRES\u元组\u正常){
printf(“%s\n”,pqresultormessage(re));
}
PQclear(re);
}
无效逐行读取文件(char*文件名、char*地址、PGconn*连接、PGresult*re){
字符文件_地址[50];
strcpy(文件地址,地址);
strcat(文件地址、文件名);
文件*FILE=fopen(文件地址,“r”);
字符行[256];
while(fgets(行、sizeof(行)、文件)){
将线路添加到线路数据库(线路、连接、re);
printf(“此行!\n”);
}
fclose(文件);
}
int main(){
//char address=“/tmp/final_project/”;
PGconn*con;
PGresult*res;
con=建立连接();
//连接(con);
创建表格存储数据(res、con);
字符文件名[20];
列出目录文件(“/tmp/final\u project/”);

对于(int i=0;在嵌入的SQL代码中,不要直接使用用户输入作为值,这会导致灾难(了解的故事)。请对准备好的语句和变量占位符进行一些研究。请不要使用全局变量“返回”函数中的值。全局变量越少越好。整个查询(包含所有字符串)是否真的适合一个50个字符的字符串?这似乎很小。尝试使用调试器逐步检查代码。您将看到问题发生的确切位置。使用调试器在崩溃发生时捕获它,然后在代码中找到它所在的位置发生,并在该点检查所有相关变量的值(包括检查字符串的长度)。