0

私は vs2010 で Windows 8 を使用しています。プログラムのこの部分を実行すると、次のエラーが表示されます。................................................................... ...................................

#include <iostream.h>
#include <stdio.h>
#include <string>
#include<stdlib.h>
#include <fstream>
using namespace std;

    int main(){
int lenA = 0;
int lenB = 0;
FILE * fileA, * fileB;
char holder;
char seqA[10], seqB[10];

/*open first file*/
fileA=fopen("c:\\str1.fa", "r");

/*check to see if it opened okay*/
if(fileA == NULL) {
    perror ("Error opening 'str1.fa'\n");
    exit(EXIT_FAILURE);
}


/*open second file*/
fileB = fopen("c:\\str2.fa", "r");

/*check to see if it opened okay*/
if(fileB == NULL) {
    perror ("Error opening 'str1.fa'\n");
    exit(EXIT_FAILURE);
}

/*measure file1 length*/
while(fgetc(fileA) != EOF) {
    holder = fgetc(fileA);
    seqA[lenA]=holder;
    lenA++;
}
lenA--;

fclose(fileA);

holder='0';

/*measure file2 length*/
while(fgetc(fileB) != EOF) {
    holder = fgetc(fileB);
    seqB[lenB]=holder;
    lenB++;
}
lenB--;

fclose(fileB);  

このエラーのリンク画像。

4

3 に答える 3

0

ファイルを読み取る方法は安全ではありません。char [10]の変数がありますが、ファイルの文字数が10文字を超えるとどうなりますか?(例として)を使用してメモリに書き込みseqA[10] = holder;、スタックを上書きします。それが問題だと思います。解決策は、10文字を読み取った後で中断するか、動的に割り当てられた配列を使用して、サイズに達したときに再割り当てすることです。

于 2013-03-01T20:12:21.910 に答える
0

これ:seqB[lenA]=holder; lenA++;ファイルが非常に短い場合 (10 文字以下 (seqBおよびlenB.

于 2013-03-01T20:08:49.317 に答える
0

seqA と SeqB を 10 文字に初期化しました。ファイルがそれよりも大きく、シーケンス配列の外側に書き込むことでスタックが破損していると思います。シーケンスにより多くのメモリを割り当てます。

于 2013-03-01T20:08:57.740 に答える