strncmp()函数与!(strncmp())函数
我正在编程一个锁,在哪里解锁它你必须在键盘中插入一个 PIN 码。我有以下变量:
char password_init[4] = {'1', '2', '3', '4'}; //initial password
char password[4];
当用户按下键盘上的某个键时,该数字将存储在变量中,password并且在用户按下 4 位数字后,将比较两个变量,以确定是否可以访问锁定。
我发现这样做的一种解决方案是使用 strncmp() 函数:
if (!(strncmp(password, password_init, 4))){
Serial.println("PIN Code correct");
}
这有效,但我不明白为什么我应该使用!(strncmo())而不是strncmo(). 如果我使用if (strncmp(password, password_init, 4)),结果将是错误的 PIN 码。
该strncmp()函数逐个字符地比较两个字符串,所以有人可以解释我为什么必须以否定方式使用它来代替初始密码和用户在键盘匹配中按下的密码吗?
回答
strncmp() 当两个字符串相同时,函数返回零,不同时返回非零。
使用!(逻辑非)运算符,当字符串相同时结果为真(1),不同时为假(0)。