在c中读取制表符分隔文件时获取“分段错误”

时间:2013-11-21 22:42:56

标签: c

我正在尝试在结构中阅读以下制表符分隔文件,但获取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

1 个答案:

答案 0 :(得分:2)

你永远不会分配(或设置)myData - 它可能指向任何地方!

看起来你想要做的就是创建某种kvstructures的列表清单(每行一个)。每条记录需要malloc一个kvstructure

myData = malloc(sizeof(kvstructure));

然后在填充之后,您需要将其添加到列表中。一个简单的方法是将kvstructure *next成员添加到kvstructure,该列表只是kvstructure*

相关问题