【发布时间】:2011-10-15 22:54:21
【问题描述】:
我只是在开发简单的逻辑来解析; 分隔的文件,如下所示,并将其内容插入数据库。
它工作正常,但在INSERT 语句的最后一次迭代中,我收到了这个错误:
selfdiag4.0.1 (157):未定义指令:pc=020000fa 非法指令(核心转储)。
我的代码如下:
int fileread() {
char str1[1024];
unsigned char catId[25]="",catName[50]="",prefix[25]="",status[10]="";
char *ptr;
char temp[1024];
int i=1,t,rc=0;
char delims[]=";";
char filename[100] ="/mnt/jffs2/category.txt";
FILE *fp;
rc=0;
fp= fopen("/mnt/jffs2/category.txt","r");
if (fp == NULL) {
printf("No such file");
return 1;
}
while(fgets(str1,sizeof(str1),fp) !=NULL) {
ptr=strtok(str1,delims);
while(ptr != NULL) {
i=1;
memset(catId,0,sizeof(catId));
memset(catName,0,sizeof(catName));
memset(prefix,0,sizeof(prefix));
memset(status,0,sizeof(status));
while(ptr!=NULL && i<=8) {
strcpy(temp, ptr);
ptr = strtok(NULL,delims);
switch(i) {
case 2: strcpy(catId,temp);
break; //insert into categoryId
case 4: Strcpy(catName,temp);
break;
case 6: Strcpy(prefix,temp);
break;
case 8: strcpy(status,temp);
break;
default:break;
} //end switch
i++;
} //end while
rc=execute("INSERT INTO category(category_id,category_name,prefix,status) VALUES('%s','%s','%s','%s');",catId,catName,prefix,status);
printf("\nIn While Loop\n");
if (rc == 0) return error_handler(rc);
} // end while
}
fclose(fp);
return 0;
}
【问题讨论】:
-
switch 语句中的索引是基于 1 还是基于 0?看起来您在通过此代码的第一次迭代中通过两次调用 strtok() 提取了两个标记,但分配了第二个标记索引 1。这是有意的吗?
-
@Kut S yup 是为了解析此文件而编写的 CatId;1;CatName;CLOTHS;Prefix;CH;ActiveStatus;Y;
-
您希望每行输入有多少项?如果只有 4 个(跳过 +4 个),则可以省略外部循环。
-
Strcpy是做什么的?还缺少execute:/ 我想说,问题出在execute语句或您使用它的方式上。
标签: c linux embedded-linux