当试图编译下面的代码时,我收到一个警告:第18行从指针生成整数而不使用强制转换,并且19和20是赋值中不兼容的类型。我对C语言的结构还不太熟悉,似乎不知道出了什么问题。

#include <stdio.h>

struct song
{       char title[70];
};

struct playlist
{       struct song songs[100];
};

void title_sort(struct playlist * list,int len)
{       int swapped = 1,i;
        char hold;
        while (swapped)
        {       swapped = 0;
                for (i = 0;i < len - 1; i++)
                {       if (list->songs[i].title > list->songs[i+1].title)
                        {       hold = list->songs[i].title;
                                list->songs[i].title = list->songs[i+1].title;
                                list->songs[i+1].title = hold;
                                swapped = 1;
                        }
                }
        }
}

int main()
{       struct playlist playlist;
        int i;
        for (i = 0;i < 5;i++)
        {       fgets(playlist.songs[i].title,70,stdin);
        }
        title_sort(&playlist,5);
        printf("\n");
        for (i = 0;i < 5;i++)
        {       printf("%s",playlist.songs[i].title);
        }
        return 0;
}

最佳答案

不能将C中的字符串与>进行比较。您需要使用strcmpholdchar但标题是char [70]可以将指针复制到字符串,但不能仅使用=复制数组。
您可以像这样使用strcpy

void title_sort(struct playlist * list,int len)
{       int swapped = 1,i;
        char hold[70];
        while (swapped)
        {       swapped = 0;
                for (i = 0;i < len - 1; i++)
                    {       if (strcmp (list->songs[i].title, list->songs[i+1].title) > 0)
                            {       strcpy (hold, list->songs[i].title);
                                strcpy (list->songs[i].title, list->songs[i+1].title);
                                strcpy (list->songs[i+1].title,hold);
                                swapped = 1;
                        }
                }
        }
}

但请注意,在C语言中,您需要检查字符串的长度等内容,因此上面的代码是危险的您需要使用strncpy或使用strlen来检查字符串的长度。

关于c - C语言中的结构指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1695495/

10-10 22:29