簡體   English   中英

在C中刪除數組中的垃圾值

[英]Removing Garbage value in array in C

我的C語言數組中有一個垃圾問題,我無法解決,為此我使用了memset函數,但這對我沒有用。 我怎么解決這個問題。 如果我在代碼塊或其他PC上運行此代碼,則無法完全運行。

這是我的代碼:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int main() {
    clrscr();
    int a, b, len = 0, x, i = 0, j, match, misMatch, gapPenalty, sim, m1, m2, m3;
    char ch;
    char *seq1 = (char *)malloc(100 * sizeof(char));
    char *seq2 = (char *)malloc(100 * sizeof(char));
    char *s1 = (char *)malloc(100 * sizeof(char));
    char *s2 = (char *)malloc(100 * sizeof(char));

    /*memset(seq1, 0, strlen(seq1) - 1);
    memset(seq2, 0, strlen(seq2) - 1);
    memset(s1, 0, strlen(s1) - 1);
    memset(s2, 0, strlen(s2) - 1);*/

    int **matrix;
    int **back;

    FILE *inputFile;
    inputFile = fopen("in.txt", "r");
    printf("Enter Match Point : ");
    scanf("%d", &match);

    printf("Enter Mismatch Point : ");
    scanf("%d", &misMatch);

    printf("Enter Gap Point : ");
    scanf("%d", &gapPenalty);

    while (fscanf(inputFile,"%s\n%s", seq1, seq2) != EOF);

    a = strlen(seq1);
    b = strlen(seq2);
    for (j = 0; j <= strlen(seq2); j++) {
        for (i = 0; i <= strlen(seq1); i++) {
           if (i == 0 || j == 0) {
               if (i == 0) {
                   matrix[j][i] = j * gapPenalty;
                   back[j][i] = 0;
               }
               if (j == 0) {
                   matrix[j][i] = i * gapPenalty;
                   back[j][i] = 0;
               }
           } else {
               if (seq1[i - 1] == seq2[j - 1]) {
                   sim = match;
               } else {
                   sim = misMatch;
               }
               m1 = matrix[j - 1][i - 1] + sim;
               m2 = matrix[j - 1][i] + gapPenalty;
               m3 = matrix[j][i - 1] + gapPenalty;
               if (m1 > m2) {
                   if (m1 > m3) {
                       matrix[j][i] = m1;
                       back[j][i] = 1;
                   } else {
                       matrix[j][i] = m3;
                       back[j][i] = 3;
                   }
               } else {
                   if (m2 > m3) {
                       matrix[j][i] = m2;
                       back[j][i] = 2;
                   } else {
                       matrix[j][i] = m3;
                       back[j][i] = 3;
                   }
               }
           }
        }
    }
    printf("%s", seq1);
    printf("\n");
    printf("%s", seq2);
    printf("\n");

    if (a > b) {
        len = a;
    } else {
        len = b;
    }

    for (x = 0; x < len; x++) {
        if (back[b][a] == 1) {
            s1[x] = seq1[a - 1];
            s2[x] = seq2[b - 1];
            a = a - 1;
            b = b - 1;
        } else if(back[b][a] == 2) {
            s1[x] = seq1[a - 1];
            s2[x] = '-';
            a = a - 1;
        } else {
             s1[x] = '-';
             s2[x] = seq2[b - 1];
             b = b - 1;
        }
    }
    for (j = 0; j <= strlen(seq2); j++) {
        for (i = 0; i <= strlen(seq1); i++) {
            printf("%d ", matrix[j][i]);
        }
        printf("\n");
    }

    printf("\n");
    for (j = 0; j <= strlen(seq2); j++) {
        for (i = 0; i <= strlen(seq1); i++) {
            printf("%d ", back[j][i]);
        }
        printf("\n");
    }

    printf("\n");
    printf("%s", s1);
    printf("\n");
    printf("%s", s2);
    printf("\n");

    free(s1);
    free(s2);
    free(matrix);
    free(back);
    getch();
    return 0;
}

使用calloc() calloc()將所有分配的內存初始化為0

// sizeof (char), by definition, is 1
char *seq1 = calloc(100, 1);
char *seq2 = calloc(100, 1);
char *s1 = calloc(100, 1);
char *s2 = calloc(100, 1);

您的注釋代碼的直接問題是您不能將strlen()應用於未初始化的數組。 您應該使用正確的大小(之前剛剛使用了一些語句)

/*memset(seq1, 0, 100);
memset(seq2, 0, 100);
memset(s1, 0, 100);
memset(s2, 0, 100);*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM