【发布时间】:2016-03-27 17:57:56
【问题描述】:
我无法让 strcmp 为相等的字符串返回 0。
这就是我的代码的外观(无论如何都是相关部分):
struct person{
char name[30];
time_t date;
char destination[30];
char phone[30];
};
我主要有:
struct person act_person;
int f = open("persons.txt", O_RDONLY | O_CREAT, S_IRUSR);
if(f == -1){
//open error
}
char city_name[30];
scanf(" %[^\n]s", city_name);
city_name[strcspn(city_name, "\n")] = 0;
//lseek(f, 0, SEEK_SET); //took it out as user alk suggested
while(read(f, &act_person, sizeof(act_person))){
act_person.destination[strcspn(act_person.destination, "\n")] = 0;
if(strcmp(act_person.destination,city_name)==0){
printf("%s\n",act_person.name);
}
}
close(f);
我正在读取的文件被写入到类似字节大小的人员结构块中,因此它应该可以工作......但无论我做什么 strcmp 都不会返回相等。
编辑:一旦我弄清楚如何做到这一点,我将尝试显示文件的 hexdump 以帮助找到用户建议的问题
这里是转储:
【问题讨论】:
-
您应该进行一些调试 - 检查每个字符串中包含的字节值。
-
一般评论:我理解你很沮丧,但最后的抱怨并没有增加问题。他们只是让我想“这个人很生气。如果我试图帮助他们,他们会生我的气吗?”
-
因此,您可能需要冷静下来,然后重新阅读您的问题,以确保其中包含有人需要提供帮助的所有内容。请注意,像“它不起作用”这样的短语是含糊的而且没有帮助 - 究竟会发生什么?创建minimal complete verifiable example 也会有所帮助 - 现在没有人可以测试您的代码,因为您遗漏了部分内容,而且我们也不知道输入文件包含什么。
-
向我们展示一个
hexdump -C文件,例如,128 字节。 -
了解如何使用 GDB。在使用 C 时,它是一个非常宝贵的工具。此外,我强烈建议您在遇到这些问题时不要在同一行上调用 3 个函数。尝试
char *act_person_tok = ...之类的方法以及另外两个电话也分别在不同的行上。也许在两者之间打印它们,或者使用 GDB 的p函数。祝你调试好运。此外,C 是一种“令人沮丧”的语言,因为它不会握住你的手。如果您需要握住您的手,请使用其他东西。就那么简单。在这个网站上生气不会让你有任何收获。