.............................. int csp_import_crl(char *path) { int ret = 0; int ret1 =0; CSP_TEXT test; //定义变量 scanf("%s",path);//path是一个数组,不需要取首地址 memset(&test, 0x00, sizeof(CSP_TEXT)); printf("1\n"); FILE *fp = fopen(path,"r"); //打开文本文件 ret1 = access(path,F_OK); //检查是否存在 if (ret1) return ret1; char buf[256] = {0}; //缓冲区 memset(buf,0,sizeof(buf)); //清空缓冲区 fscanf(fp,"%s",buf); //以下出现段错误执行不了应该是path为空,文件内容在buf,但是还有path fclose(fp); ret = csp1_crl_save_mysql(buf,&test,path); //保存数据库,小细节:第二个参数必须为取地址&test,而不是test if (ret) { return ret; } return ret; } int csp_crl_save_mysql(char *buf,CSP_TEXT *test,char *path) //内容在buf,看需要哪些参数char *path,CSP_TEXT *b12,CSP_TEXT *crl { char sql[1024 * 5 + 1] = {0}; int ret = 0; ret = csp1_mysql_check_conn(); if (ret) { return 1; } strncpy(test->path, path,strlen(path));//路径有文件名字,前期没文件名,因为上面获取的path没传进test->path strncpy(test->data,buf,strlen(buf)); printf("path is:%s\n",path); //打印为空path printf("path1 is:%s\n",test->path); //在此行path1检测出读取路径不完整,为kspace/test.txt,通过请教是因为上一个调用函数中的test少了取地址符&, sprintf(sql,"insert into Crl(filename, crl, date) values('%s', '%s', now());" , test->path,test->data); ret = csp_mysql_exec(sql, "Crl"); //exec是执行数据库中的存储过程的 if(ret) { return 0; } return ret; } ............................
调用一个函数时,要注意传入的参数类型,看是指针,还是整形之类的,不然会出现不可预知的错误。同级传值,不同级传址(同级,传值,只要传本身,不同级就要传地址。)