gpt4 book ai didi

c - 指向 C 中结构的指针

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:08 25 4
gpt4 key购买 nike

当尝试编译以下代码时,我收到一条警告,第 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 中的字符串与 > 进行比较。您需要使用 strcmp。此外,holdchar,但 title 是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com