-1
我试图读取结构中的以下制表符分隔文件,但获取segmentation fault
。我的代码无法读取值。在读取c中的制表符分隔文件时出现'分段错误'
---- ---- 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
你'myData'是一个不确定的指针,因此您的代码调用**未定义行为**。 – WhozCraig
您在输入字符串中多次使用'strtok'。 'strtok'将*指针*返回给数据,并且在下一次调用'fgets'时覆盖'line'。现在,即使'myData'指向有用的东西(如答案中所述),如果更改'line',这些结果将不再有用。 – usr2564301
@Jongware,你是对的。我解决了上述问题,除此之外。我如何从'111 \ txxxxxxxx \ t66 \ n'获得前两个元素 – user1140126