c - Strcmp 在相等的字符串上不返回相等

标签 c string strcmp

我无法让 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);

我正在读取的文件被写入类似字节大小的 person 结构 block 中,因此它应该可以工作......但无论我做什么 strcmp 都不会返回相等。

编辑:一旦我弄清楚如何做到这一点,我将尝试显示文件的十六进制转储以帮助找到用户建议的问题

这是转储:

Hexdump of persons.txt

最佳答案

因此,这会将文件中的第一条记录读入 act_person。文件中的数据将为您提供:

.name = "Mark"
.date = 0x56f821fc
.destination = "\xb5\xd9\xc1\x95\xac\x7f"
.phone = "361444555"

然后,您将读取输入的名称与目标字段进行比较,毫不奇怪,它们不匹配。下一条记录的目的地同样似乎是垃圾。

关于c - Strcmp 在相等的字符串上不返回相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36250685/

相关文章:

c - 二维数组上的指针

java - 堆连接相同的字符串会发生什么

c - 如何比较符号为 '\' 的字符串

c - 由于 C 中的 strcmp 和 strcpy 导致的程序错误

c - lua5.2在windows中调用c dll

c - 在 for 循环的第一次迭代后跳过 Scanf

string - 十字交叉地址重复数据删除

java - Java中,String.format()的实现是否考虑了String的不可变性?

c - 如果两个相似的字符串长度不同,strcmp 会返回什么?

c - ret2libc攻击不会产生外壳