我一直致力于编写一个C程序,它将打开一个文件,扫描并将其内容存储到一个数组中,然后在指定的对之间进行比较。该参考文献是在一串dna中发现突变。
尝试读取文件的最后一行时,我的问题存在。如果我注释掉那一行一切正常,但当我尝试合并读取该行的函数时,程序崩溃。
这是我到目前为止所知道的,我知道它现在不是很有效但我还在学习
(带有星号的行表示注释掉的程序以运行程序)
infile = fopen ("sequences.txt", "r");
outfile = fopen ("mutations.txt", "w");
read_top_pair(infile ,top_pairs, 15);
read_top_pair(infile, bottom_pairs, 15);
read_top_pair(infile, top_pairs2, 6);
read_top_pair(infile, bottom_pairs2, 6);
print_dna_sequence (top_pairs, 15, bottom_pairs, 15);
print_dna_sequence(top_pairs2, 6, bottom_pairs2, 6);
read_top_pair(infile, sick_top_pairs, 15);
read_top_pair(infile, sick_bottom_pairs, 15);
read_top_pair(infile, sick_top_pairs2, 6);
//read_top_pair(infile, sick_bottom_pairs2, 6); ***********************
print_dna_sequence (sick_top_pairs, 15, sick_bottom_pairs, 15);
print_dna_sequence (sick_top_pairs2, 6, sick_bottom_pairs2, 6);
check_mutation(top_pairs, bottom_pairs, sick_top_pairs, sick_bottom_pairs, outfile);
return 0;
这是我正在调用的函数:
int read_top_pair (FILE *infile, char top_pairs[], int size_top_pairs)
{
int index = 0, base = 0;
do
{
fscanf (infile, "%c", &base);
if (base != '\n')
{
top_pairs[index++] = base;
}
} while (base != '\n');
size_top_pairs = index;
return top_pairs[15];
}
我无法弄清楚我的生活为什么不会包含那条线。任何帮助将不胜感激
谢谢!
答案 0 :(得分:0)
您正在向top_pairs写入值而不检查您是否超出了size_top_pairs给出的大小。如前所述,如果sick_bottom_pairs2的大小很小,那么你就会遇到经典的缓冲区溢出。
如果这没有帮助,您可以尝试使用fgetc(..)而不是fscanf(..),因为我不能完全确定它是否正确处理文件结尾。
int read_top_pair (FILE *infile, char top_pairs[], int size_top_pairs)
{
int index = 0, base = 0;
do
{
//fscanf (infile, "%c", &base);
base = fgetc(infile);
if (base == EOF)
{
/* you've reached the end of infile */
break;
}
if (base != '\n')
{
/* do this only if (index + 1) is less than size_top_pairs */
top_pairs[index++] = base;
}
} while (base != '\n');
size_top_pairs = index;
return top_pairs[15];
}