【发布时间】:2013-11-05 17:19:41
【问题描述】:
我在结构数组books上有一个delete函数。我正在向它传递一组记录,author of book 和 name of book 和 size of the list。
现在这里鉴于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'? -
list[0].author从fgets()函数和author从strcpy()获得输入 -
要么使用调试器,要么使用
printf全部 3 个字符串printf("%s|%s|%s|\n", list[0].author, list[5].author, author);应该打印Dan Brown|Dan Brown|Dan Brown| -
@xmpirate 使用
strlen检查每个字符串的长度 -
@AlterMann - 不,
strstr()。我建议使用两种方法来验证每个字符串的输入(即strlen()和strstr())将是解决 OP 所遇到问题的一种方法。实际上,在处理字符串时,假设通常是危险的,双重检查总是一个好主意。