我有一个针对结构体数组books的删除功能。我传入了记录数组、书籍作者、书籍名称以及列表大小。在这里,给定list[0].author、list[5].author和author都等于"Dan Brown"(同一个字符串)。
为什么会发生这种情况?这里出了什么问题?
void delete(struct books *list,char author[],char name[],int n)
{
int i,a;
a=strcmp(list[0].author,list[5].author);
printf("%d\n",a); // prints 0
a=strcmp(list[0].author,author);
printf("%d\n",a); // prints other than 0
}
为什么会发生这种情况?这里出了什么问题?
'\n'
吗? - Giulio Francoprintf
输出,printf("%s|%s|%s|\n", list[0].author, list[5].author, author);
应该输出Dan Brown|Dan Brown|Dan Brown|
。 - Giulio FrancoDan Brown|Dan Brown|Dan Brown|
,而是在3行中打印出了Dan Brown
。我认为fgets()
在末尾留下了一个杂项\n
。 - user2675010strlen
检查每个字符串的长度。 - digital_revenantstrstr()
。我建议使用两种方法来验证每个字符串的输入(即strlen()
和strstr()
),这是解决 OP 遇到问题的一种方式。实际上,在处理字符串时,假设通常是危险的,双重检查总是一个好主意。 - ryyker