我正在尝试在结构中阅读以下制表符分隔文件,但获取segmentation fault
。我的代码无法读取值。
---- ---- exdata.txt
ID seq len
082054 AAAG 4
53948 AAAGGGATAGAAAAAACGAA 37
53948 AAAGGGAGACTTTGGATAAGG 39
253 ALFPGELDY 15
085241 ASHHHHHH 23
184152 ASAS 11
184152 AGGSGASAS 16
184152 AGGGSGASAS 21
184152 AGGGSGASAS 26
184152 AASGASAS 31
184152 AAAGSGXSGASAS 13
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char field1[32], field2[32], field3[32];
char *p;
int bufferSize =100;
FILE* infile_ptr = fopen("exdata.txt", "r");
char line[bufferSize];
while(fgets(line, bufferSize, infile_ptr) != NULL)
{
printf("%s", line);
p = strtok(line, '\t');
int itr = 0;
while(p != NULL) {
if(itr == 0){
strcpy(field1, p);
itr++;
}
else if(itr == 1){
strcpy(field2, p);
itr++;
}
else {
strcpy(field3, p);
itr = 0;
}
p = strtok(NULL, '\t');
}
printf("This is what read: %s%s%s", field1, field2, field3);
fclose(infile_ptr);
}
return 0;
}
错误:
$ gcc try2.c
try2.c: In function ‘main’:
try2.c:17: warning: passing argument 2 of ‘strtok’ makes pointer from integer without a cast
try2.c:32: warning: passing argument 2 of ‘strtok’ makes pointer from integer without a cast
$ ./a.out
ID seq len
Segmentation fault: 11
答案 0 :(得分:2)
你永远不会分配(或设置)myData
- 它可能指向任何地方!
看起来你想要做的就是创建某种kvstructures
的列表清单(每行一个)。每条记录需要malloc
一个kvstructure
。
myData = malloc(sizeof(kvstructure));
然后在填充之后,您需要将其添加到列表中。一个简单的方法是将kvstructure *next
成员添加到kvstructure
,该列表只是kvstructure*