如何比较整数数组?

| 我有四个传感器(sen0-sen3),它们返回
1
0
,并且我正在使用
sprintf
构成值数组。然后,我尝试将它们与
0000
1000
等进行比较。 我的问题是,即使
sen_array
的值是
1000
,也永远不会进入
else if
条件(直接到
else
条件)。
char sen_array[4];

sprintf(sen_array,\"%d%d%d%d\",sen0,sen1,sen2,sen3);
if(strcmp(\"0000\",sen_array)==0)
{
    motor_pwm((156*(0.20).),(156*(0.20)));
}
else if(strcmp(\"1000\",sen_array)==0)
{
    motor_pwm((156*(0.40)),(156*(0.40)));
}
else
{
    motor_pwm((156*(0.80)),(156*(0.80)));
}
    
已邀请:
您所看到的是内存损坏的产物。问题在于您已将ѭ5声明为ѭ11,这没有为终止null留下空间。将ѭ5更改为:
char sen_array[5];
    
不使用STL,我认为比较整数数组的最佳方法是使用
memcmp
函数来比较内存块。
int sen_array1[] = { 1, 2, 3, 4 } ;
int sen_array2[] = { 1, 2, 3, 4 } ;
if(memcmp(sen_array1, sen_array2, sizeof(int)*4) == 0) { /* do something */ }
    
您的sen_array的长度至少应为5个字符-为0终止符腾出空间。
char sen_array[4];
sprintf(sen_array, \"%d%d%d%d\", 1, 2, 3, 4);
上面将sen_array写入\'1 \'\'2 \'\'3 \'\'4 \'\'\\ 0 \'-溢出并可能影响附近的变量 使用
char sen_array[5];
也许更好的解决方案是使用整数:
int sa = sen0 * 1000 + sen1 * 100 + sen2 * 10 + sen3;

if (sa == 1000) {
  ...
} else if (sa == 1001) {
  ...
}
    
我认为sen_array的长度至少应为5个字符,除非您将sen_array用于其他用途,否则更好和更快的方法是
int res = 1000*sen0+100*sen1+10*sen2+sen3;
并使用它进行比较。     

要回复问题请先登录注册