涉及数组和垃圾字符的 C 问题可能是内存问题

问题描述 投票:0回答:1

尝试对字符串数组进行排序。字符串本身和数组中的字符串。代码似乎可以很好地对字符串本身进行排序,但在调用 sortList 函数后,我只得到垃圾字符。第一次摆弄指针和 C。

int main()
{
    char *list[LEN];
    int i, n;
    char input[SIZE+2];

    printf("How many strings will you enter");
    scanf("%d", &n );
    getchar();

    //start reading strings
    if(n<=LEN)
    {
        for(i = 0; i< n;i++)
        {
            printf("Enter string %d: ",i+1);
            fgets(input, SIZE +2, stdin);
            input[strcspn(input,"\n")] = '\0';
            list[i] = strdup(input);
        }
    }

    for(i = 0; i < n;i++)
        printf("item %d is %s\n", i+1 ,list[i]);

    for(i = 0; i<n;i++)
    {
        sortChars(list[i]);
        printf("item %d is %s\n",i+1, list[i]);
    }

    sortList(list, n);

    for(i = 0; i < n;i++)
        free(list[i]);

    for(i = 0; i < n ;i++)
        printf("item %d is %s\n", i+1, list[i]);

    return 0;
}

void sortChars(char *str)
{
    int i,j;
    int len = strlen(str);
    for(i = 0; i< len -1;i++)
    {
        for(j = 0 ;j<len-i-1;j++)
        {
            if(str[j]>str[j+1])
            {
                char tem = str[j];
                str[j] = str[j+1];
                str[j+1]= tem;
            }
        }
    }
}

void sortList(char *ptr[], int size)
{
    int i;
    for(i = 0; i < size; i++)
    {
        if(strcmp(ptr[i], ptr[i+1]) > 0)
             swap(ptr,i,i+1);
    }
}

void swap(char *ptra[], int a, int b)
{
    char *temp = ptra[a];
    ptra[a] = ptra[b];
    ptra[b]= temp;
}

代码应该对字符串进行排序。然后对列表中字符串的顺序进行排序。

这是我得到的示例:


Enter string 1: hello

Enter string 2: world

item 1 is hello

item 2 is world

item 1 is ehllo

item 2 is dlorw

item 1 is =

item 2 is ▒▒3
arrays c sorting pointers
1个回答
0
投票

您的

void sortList(char *ptr[], int size)
功能错误。

必须是:

void sortList(char* ptr , int size)
{
    int i;
    for(i = 0; i < size; i++)
    {
        if(strcmp(ptr[i], ptr[i+1]) > 0)
             swap(ptr,i,i+1);
    }
}

当您将数组(即

list
)作为参数传递给函数时,它会衰减为指向数组第一个元素地址的指针。例如,请阅读更多此处

© www.soinside.com 2019 - 2024. All rights reserved.