细分错误-按字母顺序对列表进行排序

时间:2020-04-09 23:11:44

标签: list segmentation-fault alphabetical-sort

为我提供了一个文件,该文件的开头用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 :(得分:0)

在此代码中:

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

您期望i的值是什么?

该值是不确定的,可能是0,-10000或10000000。某些可能的值将在循环的第一次迭代时立即导致立即崩溃,同时尝试构造strcmp的参数(由于i超出了访问rawRecipes的范围)。

您可能想要:int i = 0, k;

还有其他错误。

您应该真正学习如何使用调试器和how to debug small programs

在调试之前,您应该打开编译器警告,并修复编译器将告诉您的所有错误。

这里是GCC的一位:

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