当我尝试编译下面的代码时,我收到一个警告:第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;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
您无法将C中的字符串与>进行比较.你需要使用strcmp.也是hold,char但标题是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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但请注意,在C中你需要检查字符串长度等内容,因此上面的代码很危险.您需要使用strncpy或使用strlen来检查字符串的长度.