0から9999までの数字(文字列のような数字)を生成するアルゴリズムを作成し、その頻度を配列a [50000]で検索しています。文字列を印刷中にエラーが発生する
char key[4];
int freq;
for (int i = 0; i < 10000; i++) {
sprintf(key,"%04i",i); // save 4 digits in key, if i <1000 save leading 0's
freq = BruteForceStringMatch(key,a,n); //n length of a.
printf("%s-%i\n",key,freq);
}
free(a);
しかし、私がプログラムを実行すると、私はそれを取得します。
.
.
.
9845-7
9846
-10
9847-4
9848-5
-139
9850-3
9851-6
9852-5
9853-4
9854-2
9855-7
9856-5
9857-4
9858-5
9859 -9
9860-3
.
.
.
9968-6
9969 -9
9970-5
9971-4
9972-7
9973-6
9974-6
9975-2
9976-7
9977-4
9978-2
9979-7
9980-3
9981-4
9982-3
9983 -9
9984-6
9985-7
998-8
9987 -9
9988-3
9989 -9
9990-4
9991-3
9992-5
9993-2
9994 -9
9995-5
9996-6
9997-7
9998-7
私は、彼らがから来る見当がつかないrandoms位置にあるタブ、時にはキーの最後の桁がなくなると139113があるさ、などがあります。私はgccバージョン5.4.0(GCC)を使用していて、Windows 10とターミナルbabunでコンパイルしています。
詳細情報:
BruteForceStringMatchにキーの周波数を検索します。
int BruteForceStringMatch(char key[4], char* a, int length){
int freq=0;
int k;
for (int j = 0; j < length -4; j++) {
k =0;
while(k <4 && key[k] == a[j+k])
k=k+1;
if(k == 4)
freq++;
}
return freq;
}
私は5000桁のファイルからaを取得します。 4桁プラス終端ヌル - それはあなたの問題私には思える
FILE *inputfile;
char c;
int largo = 0;
char *a = (char *)malloc(50000*sizeof(char *));;
char *b = (char *)malloc(50000*sizeof(char *));;
inputfile = fopen("archivo_1.tex", "r");
if (inputfile == NULL) {
fprintf(stderr, "Failed to open the file.\n");
exit(1);
}
if (inputfile) {
for (int i=0; (c = getc(inputfile)) != EOF; i++){
a[i] = c;
//putchar(a[i]);
largo++;
}
fclose(inputfile);
}
問題を再現するのに十分なコードが必要です。 –
'BruteForceStringMatch'の定義を投稿することはできますか? –
[mcve]を投稿してください。 – kaylum