Найти максимальную длину строки и максимальное количество строк во входном файле, но я получаю ошибку сегмента? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь ввести файл в двумерный массив, но у меня возникает ошибка сегмента, когда я пытаюсь найти максимальную длину строки и максимальное количество строк.Ошибка seg возникает в функции checkSpelling.Я пытался использовать GDB, чтобы увидеть, где происходит ошибка сегмента, но я получаю, что она сразу выходит, что я не до конца понимаю.Мой код ниже.Любая помощь очень ценится.

#define MAX 1000000

struct TData{
    char **pChar;
};

int checkSpelling(const char *input, const char *dict, struct TData *pInput, struct TData *pDictionary);
int searchReplace(const char *input, const char *dict, struct TData *pInput, struct TData *pDictionary);
int save(const char *input, const char *output);

int main (int argc, char **argv){
    struct TData input, dictionary, output;
    int choice = 0;

    if(argc != 4){
            printf("Not enough input arguments in the command line.\n");
            exit(1);
    }

    do{
            printf("Menu\n");
            printf("1. Check the spelling for the file using the dictionary.\n");
            printf("2. Search and replace a given string in the inputed file.\n");
            printf("3. Save the modified file to the output file.\n");
            printf("4. Exit the program.\n");
            scanf("%d", &choice);

            switch(choice){
                    case 1:
                            checkSpelling(argv[1], argv[3], &input, &dictionary);
                            break;
                    case 2:
                            searchReplace(argv[1], argv[3], &input, &dictionary);
                            break;
                    case 3:
                            save(argv[1],argv[2]);
                            break;
                    case 4:
                            choice = 4;
                            break;
                    default:
                            printf("Input is invalid");
                            break;
            }
    }while (choice != 4);
return 0;
}

int checkSpelling(const char *input, const char *dicto, struct TData *pInput, struct TData *pDictionary){

    FILE *inputFile;
    FILE *dictFile;
    int i = 0, j = 0, k = 0, l = 0, m = 0;
    char temp[60], dicttemp[60];
    int rowCount = 0, charCount = 0;

    printf("Checking the spelling of the inputed file.\n");
    printf("Opening the inputed file...\n");
    if((inputFile = fopen(input, "rt")) == NULL){
            printf("Cannot open file\n");
            exit(1);
    }

    printf("Opening the dictonary...\n");
    if((dictFile = fopen(dicto, "rt")) == NULL){
            printf("Cannot open dictionary\n");
            exit(1);
    }

    while(!feof(inputFile)){
            if(pInput->pChar[i][j] == '\n'){
                    rowCount++;
            }
    }
    rewind(inputFile);

    pInput->pChar[i][j] = 0;

    while(pInput->pChar[i][j] != '\n'){
            charCount++;
    }
    rewind(inputFile);

    printf("Lines: %d, Max line length: %d", rowCount, charCount);

    fclose(inputFile);
    fclose(dictFile);

    printf("\n");
return 0;
}

1 Ответ

1 голос
/ 02 апреля 2019

Вот небольшой код, который иллюстрирует задачу

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

#define MAX_LENGTH 1000

int main()
{
    FILE *fp;
    char line[MAX_LENGTH];
    size_t n_rows, n_cols, length;

    fp = fopen("myfile.txt", "r");

    n_cols = 0;
    n_rows = 0;
    while (fgets(line, MAX_LENGTH, fp) != NULL) {
        n_rows++;
        length = strlen(line);
        if (length > n_cols)
            n_cols = length;
    }

    fclose(fp);

    /* the number of lines is in n_rows and the max line length is in n_cols
    do whatever you want with them */

    return 0;
}
...