-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