[英]unable to return 'true' value in C function
如果我试图检查输入5字节数组(p)对存储在闪存(数据)中的5字节数组,使用以下函数(e2CheckPINoverride),只返回true或false值。 但似乎无论我尝试什么,它只会返回'假'。
我在这里调用函数:
if (e2CheckPINoverride(pinEntry) == 1){
PTDD_PTDD1 = 1;
}
else{
PTDD_PTDD1 = 0;
}
这是功能:
BYTE e2CheckPINoverride(BYTE *p)
{
BYTE i;
BYTE data[5];
if(e2Read(E2_ENABLECODE, data, 5)) {
if(data[0] != p[0]) return FALSE;
if(data[1] != p[1]) return FALSE;
if(data[2] != p[2]) return FALSE;
if(data[3] != p[3]) return FALSE;
if(data[4] != p[4]) return FALSE;
}
return TRUE;
}
我已经在definitions.h文件中分配了true和false:
#ifndef TRUE
#define TRUE ((UCHAR)1)
#endif
#ifndef FALSE
#define FALSE ((UCHAR)0)
#endif
在哪里
typedef unsigned char UCHAR;
当我单步执行代码时,它会正确执行所有检查,传递正确的值,正确比较然后在正确的点处中断,但是无法处理true的返回值?
请帮忙?
#define TRUE 1
#define FALSE 0
忘记unsigned char。 你可以假设在c 0是假的,其他一切都是真的
可能不会解决你的问题,但你应该写:
PTDD_PTDD1 = e2CheckPINoverride(pinEntry) ? 1 : 0;
此外,你正在混合BYTE和UCHAR(即使它们可能是相同的)
尝试通过免除#define然后说出来缩小范围
return 1;
如果这样可行,那么某些东西不适用于你的#define。
如果您返回TRUE
或FALSE
,您还应该检查它们。 像这样重写if
子句:
if (e2CheckPINoverride(pinEntry) == TRUE) { // instead of '== 1'
IMO,你正在创造大量不必要的复杂性。 我写的函数是这样的:
int e2CheckPINoverride(BYTE *p) {
BYTE data[5];
return e2Read(E2_ENABLECODE, data, 5) &&
data[0] == p[0] &&
data[1] == p[1] &&
data[2] == p[2] &&
data[3] == p[3] &&
data[4] == p[4];
}
调用代码变得简单:
PTDD_PTDD1 = e2CheckPINoverride(pinEntry);
只是我测试工作的一个小例子。 我不知道e2Read的内容,所以我只做了一个假人
#ifndef UCHAR
typedef unsigned char UCHAR;
#endif
#ifndef BYTE
typedef char BYTE;
#endif
#ifndef TRUE
#define TRUE ((UCHAR)1)
#endif
#ifndef FALSE
#define FALSE ((UCHAR)0)
#endif
int e2Read(int myconst, BYTE* data, int num)
{
int i;
for(i=0;i<num;i++)
*(data++) = 0; // You can change thisone to test different results.
return 1;
}
BYTE e2CheckPINoverride(BYTE *p)
{
#define E2_ENABLECODE 3
BYTE data[5];
if(e2Read(E2_ENABLECODE, data, 5)) {
if(data[0] != p[0]) return FALSE;
if(data[1] != p[1]) return FALSE;
if(data[2] != p[2]) return FALSE;
if(data[3] != p[3]) return FALSE;
if(data[4] != p[4]) return FALSE;
}
return TRUE;
}
int main(void)
{
BYTE b[5] = {0,0,0,0,0};// You can change thisone to test different results.
BYTE* pinEntry = b;
if (e2CheckPINoverride(pinEntry) == 1){
printf("Returned true\n");
}
else{
printf("Returned false\n");
}
return 0;
}
您的数据数组从未初始化,因此内部具有随机值。
BYTE data[5];
因此,您要将数组p中的元素与数组数据中的随机值进行比较。 它几乎总是返回FALSE。
结论:使用有意义的数据填充数据数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.