Ошибка сегментации - сортировка списка по алфавиту - PullRequest
0 голосов
/ 10 апреля 2020

Мне дали файл с несколькими рецептами, обозначенными в начале как 0. За каждым рецептом следуют его ингредиенты, обозначенные в начале как 1, как показано ниже:

char *rawRecipes[]={ "0Broccoli Coleslaw", "1olive oil", "1white vinegar", "1white sugar", "1package chicken flavored ramen noodles", "1broccoli", "1carrots", "1green onions", "1sunflower seeds", "0Creamy Broccoli Salad", "1broccoli", "1red onion",

Я пытаюсь отсортировать ингредиенты в алфавитном порядке в списке, но у меня ошибка сегментации. Я был бы очень признателен за вашу помощь в этом. Вот что я сделал:


int main(void)
{
    int input; 
    printf("\n"); 
    printf("\n"); 
    printf("Enter a command by number\n");
    printf("4. List All Ingredients in alphabetical order\n"); 
    printf("Give input: "); 
    scanf("%d", &input);

    if (input == 4) //  List All Ingredients in alphabetical order
    { 
        int i = 0,k;
        char alphabet[1000] ; 
        while(strcmp(rawRecipes[i], "") !=0)
            {
                if(rawRecipes[i][0] == 1 && rawRecipes[i+1][0] == 1)
                {
                    char temp;
                    for(k=0; k<250; k++)
                  { 
                        alphabet[k] = rawRecipes[i]; 
                        alphabet[k + 1] = rawRecipes[i + 1];
                  }
                        if(strcmp(alphabet[i], alphabet[i + 1] > 0))
                            {
                                temp = alphabet[i]; 
                                strcpy(alphabet[i], alphabet[i + 1]); 
                                strcpy(alphabet[i + 1], temp);
                            }
                }
                i++;
            } 

            int m;
            for(m=0; m < 250; m++)
            {
                        printf("%d: %c", m, alphabet[m]); 
            }
    }
    return 0;
}

1 Ответ

0 голосов
/ 10 апреля 2020

В этом коде:

        int i,k;
        char alphabet[1000] ; 
        while(strcmp(rawRecipes[i], "") !=0)

Что вы ожидаете от значения i?

Это значение не определено и может быть 0, -10000 или 10000000 Некоторые из возможных значений будут вызывать немедленный cra sh прямо на первой итерации через l oop, при попытке создать аргумент для strcmp (из-за того, что i находится вне диапазона для доступа к rawRecipes).

Возможно, вы захотите: int i = 0, k;.

Также есть и другие ошибки.

Вы действительно должны научиться использовать отладчик, и как отлаживать небольшие программы .

И перед отладкой вы должны включить предупреждения компилятора и исправить все ошибки, о которых расскажет компилятор.

Вот один из G CC:

t.c:41:37: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
   41 |                         alphabet[k] = rawRecipes[i];
...